编辑:对于我的班级,我必须使用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背景,这甚至都不是问题。
答案 0 :(得分:29)
您的阵列需要能够容纳四个char
,因为它还必须包含0终止符。修复后,以格式指定最大长度,
scanf("%3s", string);
确保scanf
读取不超过3个字符。
答案 1 :(得分:9)
最安全的方法是使用
<强>与fgets(字符串,如图4所示,标准输入); 强>
这里你可以存储最多3个字符,包括为NULL('\ 0')字符保留的一个空格。
答案 2 :(得分:4)
答案 3 :(得分:4)
您应该使用scanf()
的 width 修饰符并将其设置为比字符串大小少,以确保存在空间对于NULL
终结者。
所以,如果你想存储“是”,你首先需要一个比你拥有的数组更大的阵列;一个大小为4,3个字符加上1为空终止符。此外,您应该指示scanf()
只读取 size - 1 个字符,其中size是数组的长度,因此在这种情况下为3,如下所示:
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}