MrH*_*hma 31 c string scanf format-specifiers
编辑:对于我的班级,我必须使用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);
}
Run Code Online (Sandbox Code Playgroud)
所以这段代码应该简单地要求他们输入yes
或no
.我正在设定我char array
的大小3
.这样它足够大yes
,也可以no
.但是如果有人要输入无效的输入,比如yesss
,我知道如何比较字符串以后处理这样的事件,但是这不会在技术上/可能覆盖我声明的其他局部变量,因为它会扩展到我的数组长度之外?如果是这样,有没有办法处理这个限制3个输入字符或什么?如果没有,为什么/如何知道只输入3的大小?
*注意:我是C的新手,我找不到这个,所以即使这很简单,我也很感激.因为我显然缺少一些东西.我来自java背景,这甚至都不是问题.
Dan*_*her 35
您的阵列需要能够容纳4 char
秒,因为它还必须包含0终止符.修复后,指定格式的最大长度,
scanf("%3s", string);
Run Code Online (Sandbox Code Playgroud)
确保scanf
读取不超过3个字符.
小智 10
最安全的方法是使用
与fgets(字符串,如图4所示,标准输入);
在这里,您可以存储最多3个字符,包括为NULL('\ 0')字符保留的一个空格.
您应该使用宽度修饰符scanf()
并将其设置为比字符串的大小小1,以确保为NULL
终止符留出空间。
所以,如果你想存储“是”,你首先需要一个比你拥有的更大的数组;一个大小为 4、3 个字符加 1 的空终止符。此外,您应该指示scanf()
读取不超过size - 1 个字符,其中 size 是数组的长度,在这种情况下为 3,如下所示:
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
使用“宽度”修饰符;
%[*][width][modifiers]type
Run Code Online (Sandbox Code Playgroud)