【问题标题】:Unable to read the last value in the code无法读取代码中的最后一个值
【发布时间】:2015-08-31 13:49:48
【问题描述】:

我本来打算写一个程序来打印星星的数量。示例

输入数字:12 11 9 8 ^D

12 | ************
11 | ***********
9 | *********
8 | ********

#include <stdio.h>

int main(int argc, char *argv[]) {
int a;
printf("enter values \n");

while (scanf("%d ", &a) != EOF) {

    printf("%d |", a);

    for (int j = 1; j<= a; j++) {
        printf("*");
    }
    printf("\n");
}

}

使用我的代码,它会打印出正确的输出,但不会打印出我输入的最后一个值的星数。就像上面的例子一样,它不会打印出 8 颗星,直到我再次按回车键或按 ^D。我想知道我的代码是否有问题。 ?

【问题讨论】:

  • 在上面的例子中,它什么时候打印每个数字相对于你输入的行?
  • 你应该先看看这个...stackoverflow.com/questions/1516122/…
  • 尝试scanf("%d", &amp;a) 而不是scanf("%d ", &amp;a)

标签: c algorithm printf getchar


【解决方案1】:

不,您的代码没有任何问题。

stdin 是行缓冲的,因此在您按下或之前无法读取输入(在 Linux 中为 =ctrl-d)。

conio.h 等库提供非缓冲输入。

【讨论】:

  • 但是当我按下回车键时它不应该打印它们吗? ??在我按 cntrl+D 之前它不会打印最后一个
  • stdout 在连接到终端时通常是行缓冲的,因此 printf("\n"); 应该将输出刷新到屏幕。您可以尝试添加fflush(stdout); 以编程方式刷新输出缓冲区。
【解决方案2】:

删除scanf("%d ", &amp;a))%d之后的尾随空格。

#include <stdio.h>

int main(int argc, char *argv[]) {
    int a;
    printf("enter values \n");

    while (scanf("%d", &a) != EOF) {

        printf("%d |", a);

        for (int j = 1; j<= a; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2015-01-17
    • 2015-07-30
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2016-05-18
    相关资源
    最近更新 更多