【问题标题】:Program output in wrong order程序输出顺序错误
【发布时间】:2015-03-04 16:15:43
【问题描述】:

我在 Eclipse 环境中处理 C 项目,代码正确且可执行,但输出 行不是按照程序要求用户的顺序 输入 1-5 的数字,然后要求输入名称,然后输入街道 但除非我输入这些值,否则控制台屏幕上什么也不会出现

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

int main(void) {

    char name[20], address[30];

    char c;
    printf("How do you feel on a scale of 1-5?");
    c = getchar();

       printf("Enter name: ");
       scanf("%s", &name);

       printf("Enter your address: ");
       scanf("%s", &address);

       printf("Entered Name: %s\n", name);
       printf("Entered address:%s\n", address);

       printf("You said you feel: ");
       putchar(c);

    return EXIT_SUCCESS;
}

【问题讨论】:

  • 这可能会让人感到意外,但问题不在于 Eclipse。如果程序不工作,代码是错误的。
  • 你能描述一下事情是怎么乱的吗?
  • 正确的顺序是你在 1-5 的规模上感觉如何?1,输入姓名:ryanyuyu,输入你的地址:埃及,但我的输出是 1 ryanyuyu 埃及 你在规模上感觉如何1-5 人?输入姓名:输入您的地址:输入姓名:ryanyuyu 输入地址:埃及您说您觉得:1
  • 控制台屏幕不要求输入值

标签: c eclipse console eclipse-cdt


【解决方案1】:

问题是标准输出是行缓冲的(当进入控制台时),所以除非你打印一个换行符,否则输出将保持缓冲而不显示(好的,会有一个可以缓冲的最大大小把这只是细节,你的少量输出将保留在缓冲区中)。

我想到的两个解决方案是,在前 3 次 printf 调用后使用 fflush (stdout);,这将导致标准输出缓冲区刷新到控制台,应该可以解决您的问题。

您也可以关闭标准输出的缓冲,请参阅 setvbuf 了解如何执行此操作,但我认为,将此调用放在 main 开头附近(在任何输出之前)应该可以工作(未经测试):

setvbuf (stdout, NULL, _IONBF, 0);

【讨论】:

  • 在程序开始时我使用了 setvbuf 并且也可以使用
  • 使用这个 scanf(" %s", &name); scanf 中的前导空格字符。
【解决方案2】:

问题是您的第二个 scanf 正在捕获前一个输入的 \n 字符,请尝试使用 fgets 以避免这种行为。

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2017-08-02
    • 2014-12-12
    相关资源
    最近更新 更多