【问题标题】:How come fflush(stdin) function is not working?为什么 fflush(stdin) 函数不起作用?
【发布时间】:2013-10-26 18:27:47
【问题描述】:

我的主要问题是为什么 fflush(stdin);功能不工作? 每当我运行代码时,我都无法使用空格 ex 获得第二个输入。你好世界,但我得到你好??谢谢

#include <stdio.h>

main(){

    int      x;
    double   y;
    char     string[100];

     /*

      * string input

      */

     printf("Enter one word: ");
     scanf("%s", string);  // note there is no & before string */
     printf("The word you entered was >>%s<<\n");

     printf("Enter many words: ");
     fflush(stdin); // <---- for some reason this function is not working
     scanf("%[^\n]", string); // read up to a newline (multiple words)

     printf("The text you entered was >>%s<<\n");

     getchar();   
}

【问题讨论】:

  • 你的问题与fflush(stdin)无关。它与缺少的参数有关。见下文。 (把第二个参数放进去,然后就可以做一些格式化工作了)

标签: c string scanf fflush


【解决方案1】:

因为fflush(stdin) 是未定义的行为。 fflush() 仅由 C 标准为输出流定义,并更新最后一个操作为输出的流。

【讨论】:

  • 在 POSIX 派生系统上,fflush(stdin) 具有未定义的行为。在基于 Windows 的系统上,该行为由 Mi​​crosoft 记录,它会丢弃输入缓冲区中已有的所有数据。
  • 根据 C 语言,无论你在什么平台上,它仍然是未定义的,而且 OP 也没有提供关于他的实现的细节。 fflush() 在输入流上的行为根据标准是未定义的,而不是实现定义的,因此从标准 C 的角度来看,它始终是一个错误,即使实现为它定义了有意义的行为。
  • @PaulGriffiths - 同意你的说法,它确实解决了所述问题,但真正的问题是两部分,两者都不是由于滥用fflush() 1)代码问题描述区域中的 OP 与 实际 使用的不匹配,会出现运行时错误。 2)(与第一个相关)如果printf()有附加参数string,代码运行。并按照 OP 的描述运行。
【解决方案2】:

如果您得到任何输出,那是因为您在问题描述区域中显示的代码不是您实际使用的代码。

关于您的陈述:
我无法获得带有空格的第二个输入。 Hello World 但我得到的是 Hello??
如果printf() 语句中没有附加参数,您将不会得到任何输出,并且会出现运行时错误。

行(两个地方)printf("The word you entered was &gt;&gt;%s&lt;&lt;\n");需要另一个参数,添加,string,像这样:

 printf("The text you entered was >>%s<<\n", string);

这将解决您的问题。

这是在 printf() 中添加参数 string 后的输出删除 fflush()
@ 987654321@
显然,fflush(stdin); 并不是这里真正的问题,至少对于陈述的问题?

【讨论】:

  • 感谢您的澄清,但这并不能解决主要问题,数组名称已经是第一个元素的地址,所以我认为我不需要另一个参数?如果我错了,请告诉我..
猜你喜欢
  • 2012-02-25
  • 2012-12-27
  • 2014-01-15
  • 2015-06-26
  • 2023-04-04
  • 1970-01-01
  • 2014-05-19
  • 2018-06-15
  • 1970-01-01
相关资源
最近更新 更多