为了账号安全,请及时绑定邮箱和手机立即绑定

简单的C扫描不工作?

简单的C扫描不工作?

C
繁星coding 2019-06-24 13:17:30
简单的C扫描不工作?如果我尝试这样的东西:int anint;char achar;printf("\nEnter any integer:");scanf("%d", &anint);printf("\nEnter any character:");scanf("%c", &achar); printf("\nHello\n");printf("\nThe integer entered is %d\n", anint);printf("\nThe char entered is %c\n", achar);它允许输入一个整数,然后跳过第二个整数。scanf完全来说,这真的很奇怪,就像我交换两个(char(首先,它工作得很好。到底是怎么回事?
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

读取输入时使用scanf,则在按下返回键后读取输入,但返回键生成的换行符不被scanf,这意味着您下次读到char从标准输入将有一个换行符准备阅读。

避免的一种方法是使用fgets将输入读入为字符串,然后使用sscanf作为:

char line[MAX];printf("\nEnter any integer:");if( fgets(line,MAX,stdin) && sscanf(line,"%d", &anint)!=1 ) 
   anint=0;printf("\nEnter any character:");if( fgets(line,MAX,stdin) && sscanf(line,"%c", &achar)!=1 ) 
   achar=0;

另一种使用换行符的方法是scanf("%c%*c",&anint);..这个%*c将从缓冲区读取换行符并丢弃它。

您可能需要阅读以下内容:

常见问题:为什么每个人都说不使用scanf?


查看完整回答
反对 回复 2019-06-24
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

其他答案是正确的-%c不跳过空格。最简单的方法是将空格放在%c:

scanf(" %c", &achar);

(格式字符串中的任何空格都会使scanf使用所有连续空格)。


查看完整回答
反对 回复 2019-06-24
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

呼叫getchar()以前scanf也将清除存储的行中断。更轻巧,但更符合实际情况

char input_1;char input_2;getchar();scanf("%c", &input_1);getchar();scanf("%c", &input_2);

将刷新换行符,在连续的代码行中更有用,在这些代码中,您知道它只是一个排队的值,而不是一个字符串。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 357 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信