【问题标题】:Help While Loop in C帮助 C 中的 While 循环
【发布时间】:2024-01-12 01:22:01
【问题描述】:

我是 C 编程新手,我来自 Java 背景。我想知道为什么在下面的代码中,在 while 循环中,我必须输入十次输入,然后显示所有十个输入。我正在尝试输入一次内容,然后立即显示。然后继续输入我的其他输入。

#include <stdio.h>
#include <stdlib.h>
#include "Helper.h"


main(){

print(PROGRAM_INFO); //prints program name and author
print(PROMPT);

char input [100]; //array to hold input from user
int isActive = 1; //1 continue shell, 0 terminate shell
int count = 0;

while (isActive == 1 && count < 10){
    print(PROMPT);
    ++count;
    scanf("%s", input);
    print(input);


}


}

【问题讨论】:

    标签: c printing while-loop scanf


    【解决方案1】:

    您的print 是复制/粘贴错误,对吗?应该是printf

    而且你真的不应该直接以 printf 的格式打印用户字符串。
    想象一下用户类型 "%d%f%s\a%c" ...

    最好的办法是

    printf("%s\n", input);
    

    使用格式中的“\n”,您不需要fflush(stdout);,因为默认情况下标准输出是行缓冲的,而“\n”会自行处理。

    此外,如果用户键入 "%d%f%s\a%c",那将是您打印的内容。


    最好的办法是

    puts(input);
    

    puts 将 '\n' 添加到输出中,格式字符串没有问题。

    【讨论】:

      【解决方案2】:

      默认情况下输入/输出是缓冲的,即输入和输出字节在显示到流之前存储在字节数组中。
      系统中的BUFSIZ一般是1024的倍数。虽然printf是行缓冲的,但是缓冲区 遇到换行符时自动刷新。
      fflush(stdout) 导致缓冲数据刷新到输出流,在这种情况下是标准输出。 您可以使用setvbuf() 函数控制缓冲区处理

      【讨论】:

      • 请注意,stdout 是行缓冲的,因此您无需等待 BUFSIZ 字符。
      • fflush 不会导致缓冲数据“显示在屏幕上”。它使程序的标准输出流刷新其缓冲区。 如果 stdout 与当前在屏幕上可见的 tty 相关联,那么它会偶然导致文本显示在屏幕上。 (换句话说:stdout 不是屏幕。不要做这样的假设。)
      • @William,thomas.. 感谢您按照指出的方式编辑了 cmets。
      【解决方案3】:

      尝试在每个print(input) 之后刷新fflush(stdout)

      【讨论】:

      • 是的,与 '\n' 相比,fflush 肯定是更好的方法。
      • 谢谢你帮我解决了类似的问题,现在我不用问了!
      【解决方案4】:

      您需要刷新 STDOUT。 fflush(STDOUT) 应该这样做,在打印之后添加。

      【讨论】:

        【解决方案5】:

        在您的最终打印语句之后,您可能会调用 fflush(stdout);将标准输出刷新到屏幕上。

        【讨论】:

          【解决方案6】:

          尝试在打印中添加一个 '\n' 字符。流只是没有被刷新。

          【讨论】:

            最近更新 更多