这是一个小程序:
#include <stdio.h>
int main() {
char str[21], choice[21]; int size;
while(1){
printf("$ ");
fgets(str, 20, stdin);
printf("Entered string: %s", str);
if(str[0] == 'q') {
printf("You sure? (y/n) ");
scanf("%s", choice);
if(choice[0] == 'y' || choice[0] == 'Y')
break;
}
}
return 0;
}
它使用读取字符串fgets()
。如果字符串以 a 开头q
,它确认用户是否要退出,如果用户键入则退出y
.
当我运行它并输入q
, 有时候是这样的:
$ q
Entered string: q
You sure? (y/n) n
$ Entered string:
$
请注意$ Entered string:
。清楚地,fgets()
尽管我没有输入任何内容,但输入了一个空字符或其他内容。
这是怎么回事?
正如其他答案中所述scanf
调用将换行符留在输入缓冲区中,您也可以使用getchar()
像这样的 scanf 之后:
scanf("%20s", choice);// always remember( & good) to include field width
// in scanf while reading
字符串,否则在大字符串的情况下它将覆盖缓冲区`
getchar(); //this will eat up the newline
此外,您还应该像这样使用 fgets:
fgets(str,sizeof str, stdin); //Its better
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)