如何在程序结束时和每次迭代结束时一直输出结果?

时间:2016-02-28 05:04:55

标签: c

所以我的程序接受一个字符串,然后将其输出为选框标记。我有一个for循环,因此它可能需要多个字符串,然后输出每个字符串作为符号。

我的问题是:每次迭代后,它会输出符号,然后继续提示我输入下一个字符串,当我希望它立即接收所有输入时,然后在最后输出每个符号。这就是我在说的:

Current Input:
3
Hello World!
5
Sign #1: (This is the output)
[Hello]
[ello ]
[llo W]
[lo Wo]
[o Wor]
[ Worl]
[World]
[orld!]
[rld! ]
[ld! H]
[d! He]
[! Hel]
[ Hell]
Activist
10
Sign #2: (This is the output)
[Activist  ]
LOL
2
Sign #3: (This is the output)
[LO]
[OL]
[L ]
[ L]

这就是我想要的:

Input:
3
Hello World!
5
Activist
10
LOL
2 
Output:
Sign #1: 
[Hello]
[ello ]
[llo W]
[lo Wo]
[o Wor]
[ Worl]
[World]
[orld!]
[rld! ]
[ld! H]
[d! He]
[! Hel]
[ Hell]

Sign #2:
[Activist  ]

Sign #3:
[LO]
[OL]
[L ]
[ L]

这是我的代码:

#include <stdio.h>
#include <string.h>

void ignoreRestOfLine(FILE *fp) {
    int c;
    while ((c = fgetc(fp)) != EOF && c != '\n');
}

int main() {
    int num_times, count = 0;
    int marq_length, sign = 0;
    scanf("%d ", &num_times);
    char s[100];

    for (count = 0; count < num_times; count++) {
        if (fgets(s, sizeof(s), stdin) == NULL) {
            // Deal with error.
        }
        if (scanf("%d", &marq_length) != 1) {
            // Deal with error.
        }
        ignoreRestOfLine(stdin);

        size_t n = strlen(s) - 1;
        int i, j;

        if (s[strlen(s)-1] == '\n')
            s[strlen(s)-1] = '\0';

        printf("Sign #%d:\n", ++sign);

        if (n <= marq_length) {
            printf("[%-*s]\n", marq_length, s);
        } else {
            for (i = 0; i < n + 1; i++) {
                putchar('[');
                for (j = 0; j < marq_length; j++) {
                    char c = s[(i + j) % (n + 1)];
                    if (!c)
                        c = ' ';
                    putchar(c);
                }
                printf("]\n");
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您需要更改程序逻辑:将所有输入解析为数组并在第二阶段执行任务。更改代码会有点乏味。

更简单的解决方案是将所有输入放入文本文件中,并使用shell重定向从文本文件中读取输入。所有输出都会立即出现。