c/c++语言开发共享注意c中字符串的奇怪行为

仍然处于学习模式,可能是下面的问题是一个非常愚蠢,但我不知道为什么会发生..

#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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐