【发布时间】:2021-10-04 00:35:29
【问题描述】:
我正在 C 上尝试基本代码 sn-p。我的目的是在用户输入“a”之前忽略所有字符,然后将下一个非空白字符复制到 x。
#include <stdio.h>
int main()
{
char x ;
printf ("Input character - ") ;
scanf (" a %c", &x) ;
printf ("x=%c is the input", x) ;
return 0 ;
}
我在控制台中输入如下:
a <enter>
s <enter>
我得到的输出为:x=s is the input。这是正确的。
但是当我在控制台中输入如下:
b <enter>
执行突然结束,我得到的输出为:x= is the input。
我不明白这种行为。我期待程序忽略“b”和后续字符,直到用户输入“a”。我是不是对 scanf 语句的解释有误?
【问题讨论】:
-
使用循环读取所有字符(例如
getchar或类似字符)来检查'a'字符输入。还要记得检查EOF(并记住所有字符输入函数都会返回一个int,这对于EOF的检查非常重要)。 -
Did I interpret the scanf statement wrongly?你对scanf(" a")的解释是“阻塞并读取,直到输入时遇到字符“a””? -
您的代码等待正好一个
a字符。那里没有“直到”的概念。 -
Meenie Leis,尝试
if (scanf("%*[^a]a %c", &x) ==1) ...1)扫描并忽略所有非a,2)扫描a,3)忽略空白4)扫描char。我个人认为getchar()是你要走的路。 -
查看
scanf的返回值。它会告诉您成功转换的项目数。如果您输入b,它将返回 0 而不是 1。