编辑:对于我的班级,我必须使用scanf
。所以推荐其他输入方式不是我正在寻找的解决方案(如果有一个涉及scanf)。
如果我正在读取小项目的用户输入(例如,游戏)。让我们问一下would you like to play?
这会接受yes
或no
答案。所以我写了一些像这样的简单代码:
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
所以这段代码应该简单地要求他们输入yes
或no
。我将char array
的长度设置为3
。这样它足以容纳yes
和no
。但是如果有人要输入无效的输入,例如yesss
,我知道如何比较后面的字符串来处理这样的事件,但是这不会在技术上/可能覆盖我声明的其他局部变量,因为它会延伸到我的长度之外阵列?如果是这样,有没有办法处理这个限制3个输入字符或什么?如果没有,为什么/如何知道只输入3的大小?
*注意:我是C的新手,我在这方面找不到多少所以即使这很简单,我也很感激。因为我显然缺少一些东西。我来自java背景,这甚至都不是问题。
你的数组需要能够容纳四个char
s,因为它还必须包含0-terminator。修复后,指定格式的最大长度,
scanf("%3s", string);
确保scanf
读取不超过3个字符。
最安全的方法是使用
与fgets(字符串,如图4所示,标准输入);
在这里,您可以存储最多3个字符,包括为NULL('\ 0')字符保留的一个空格。
您应该使用scanf()
的宽度修饰符并将其设置为小于字符串大小的宽度,以便确保NULL
终止符存在空间。
所以,如果你想存储“是”,你首先需要一个比你拥有的阵列更大的阵列;一个大小为4,3个字符加上1为空终止符。此外,您应该指示scanf()
读取的大小不超过1个字符,其中size是数组的长度,因此在这种情况下为3,如下所示:
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}