仍然处于学习模式,可能是下面的问题是一个非常愚蠢,但我不知道为什么会发生..
#include int main() { /* code to accept string and then a character from stdin */ char str[20], inp; /*take string from stdin */ printf("string:n"); scanf("%s",str); fflush(stdin); /*input a character */ printf("char:n"); scanf("%c",&inp);/* code does not reach this point and exits */ }
正如评论中所提到的,在我输入字符串之后,例如。 ‘strng’代码只是在打印char后退出:但它不会等我输入字符。 根据我的理解,我已经给出了足够大的数组大小来存储字符串,如果输入的字符串小于str数组的大小,编译器将自动在字符串的末尾添加空字符并继续进行。 我错过了什么或者我的代码中有错误。 请建议。
谢谢。
在第二个scanf中的%c
之前放一个空格,如下所示:
scanf(" %c",&inp)
正如其他人所说, fflush
仅针对输出流定义。
尝试删除fflush(stdin);
并在scanf(" %c",&inp);
%c之前放置一个空格scanf(" %c",&inp);
首先fflush(stdin)
是错误的 。 很多人推荐它,但它很简单明了。
该问题是由scanf
在输入缓冲区中留下n
引起的,因为“%s”不读取空格字符。 当达到scanf("%c"..)
时,立即“满意”并用n
填充inp
并将其称为一天。
问题很常见,请参阅以下C常见问题解答:
一个(可能是危险的)解决方案是丢弃n
输入:
while((c = getchar()) != 'n' && c != EOF) ;
另一个解决方案可能是使用fgets
并解析它,或者可能使用getc
一次读取一个字符,或者可能调整第二个scamf以丢弃空白字符。
需要了解更多c/c++开发分享注意c中字符串的奇怪行为,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享注意c中字符串的奇怪行为相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/978897.html