c/c++语言开发共享在C中使用多个scanf时,使用scanf忽略空格的问题

我试图在一个小程序中多次使用scanf来获取保证有空格的输入。 从我浏览的多个线程看起来像scanf("%[^n]", string); 是让它忽略空间的方法。 这适用于一行,但该行之后的任何其他scanf都没有通过,它们各自的字符串显示如下:

 Action: J   J Resolution: J:F J B J 

这是一些我认为可行的示例代码,但没有。

 #include  int main(void) { char str1[100]; char str2[100]; printf("Situation?n"); scanf("%[^n]", str1); printf("Action Taken?n"); scanf("%[^n]", str2); printf("Situation: %sn",str1); printf("Action: %sn",str2); } 

如果在提示输入情况时输入“Just a test”,则会发生以下情况:

 Situation? just a test Action Taken? Situation: just a test Action:   _  ? JN=  J J d     J0d   8d  TJ J 

任何建议或解决方案(不包括fgets )? 对正在发生的事情的解释也会很棒。

编辑: scanf上的解决方案:“%[^ n]”跳过第二个输入,但“%[^ n]”没有。 为什么?

添加char* fmt = "%[^n]%*c"; 100%工作。

 char* fmt = "%[^n]%*c"; printf ("nEnter str1: "); scanf (fmt, str1); printf ("nstr1 = %s", str1); printf ("nEnter str2: "); scanf (fmt, str2); printf ("nstr2 = %s", str2); printf ("nEnter str3: "); scanf (fmt, str3); printf ("nstr2 = %s", str3); printf ("n"); 

    更改

     scanf("%[^n]", str1); 

     scanf("%[^n]%*c", str1);//consume a newline at the end of the line 

    方法数量:

    而不是以下不消耗Enter'n' (这是问题):

     scanf("%[^n]",str1); 

    无论采用何种解决方案,都要限制读取的最大字符数并检查函数的返回值。

      if (fgets(str1, sizeof str1, stdin) == NULL) Handle_EOForIOError(); 

    我没有立即回答您的问题,如果您想要一行输入,为什么不简单地使用fgets (甚至获取 )?

    解决方案一:使用scanf

    如果您仍想通过scanf读取它,@ chux和@BLUEPLXY提供的答案就足够了。 喜欢:

      scanf(" %[^n]", str); //notice a space is in the formatted string 

    要么

      scanf("%[^n]%*c", str); 

    解决方案二:使用getline() (虽然它是POSIX扩展)

    因为使用gets()和’fgets()`有时是不可靠的。

      以上就是c/c++开发分享在C中使用多个scanf时,使用scanf忽略空格的问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519823.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐