我想阅读一些用户输入并对每个输入执行一些操作。我使用此代码执行此操作:
char c;
while(1){
printf("input");
c = scanf ( "%s", &c ) ;
}
这很好用。但我需要它接受一个空的输入。但它只是继续下一行,并期望一个非空输入。我怎么能这样做?
现状:
input:asdf
input:b
input:c
input:d
input:e
input:
fjhkjh
预期:
input:asdf
input:b
input:c
input:d
input:e
input:blabla
input:f
input:
input:
cmd控制台是如何工作的...... 更新:我不只读一个charcater,这是一个例子
答案 0 :(得分:1)
首先,您不应该使用%s将输入存储在单个字符中,因为%s用于以空字符(\ 0)结尾的字符串。 不要在scanf()中使用& 和%s 。 要存储单个字符,请使用:
scanf("%c",&c);
或
c = getchar();
答案 1 :(得分:0)
首先,在您的代码中,
scanf ( "%s", &c ) ;
调用undefined behavior。
,因为您无法在char
内填入传入的字符串。
那就是说,%s
跳过前面的空格并读取非白色空格直到最后的空格并忽略最后一个空格,所以你不能只读 使用%s
的空格。
引用C11
,章节§7.21.6.2,fscanf()
,(强调我的)
s
匹配一系列非空白字符。如果不存在
l
长度修饰符,则相应的参数应为a 指向字符数组的初始元素的指针大到足以接受 序列和终止空字符,将自动添加。
因此,我们可以清楚地看到,c
不足以保存甚至单个char
输入,它也将超出绑定访问权限来存储终止空值。
您似乎需要getchar()
或类似。
答案 2 :(得分:0)
它没有内部工作,你已经将它声明为单个char,但是你使用了%s,这是一个char数组。您作为输入获得的char存储为空值..您给出的每个字符都被视为空值。
如果您有疑问,请在printf("%s",c);
scanf();
答案 3 :(得分:0)
首先你必须使用getchar();或单个字符的scanf中的%c 然后你可以使用if for test作为输入字符
char c;
while(1)
{
c=getchar();
if(c==' ')
break();
}
这仅适用于单个字符输入。