有没有其他方法只在程序到达程序结束时才输出数据?

时间:2016-11-26 06:16:12

标签: c++ c

int n;
scanf("%d",&n);
printf("output:%d\n",n);
scanf("%d",&n);
printf("output:%d\n",n);
scanf("%d",&n);
printf("output:%d\n",n);

指令printf在执行后立即输出数字,只有在程序到达程序结束时才有其他方式输出数据吗?

我想:

3
4
5
output:3
output:4
output:5

3
output:3
4
output:4
5
output:5

4 个答案:

答案 0 :(得分:2)

您可以使用递归来完成此任务。

int main(){    
    int n=2;
    foo(n);
}
void foo(int n){
    int tmp;
    if(!n){
        return;
    }else{
        scanf("%d",&tmp);
        foo(n--);
        printf("%d",tmp);
    }

}

答案 1 :(得分:1)

如果你正在使用一个相对较新的POSIX系统(2008 POSIX规范),你可以使用open_memstream打开一个FILE,将文本假脱机到内存,以后你可以进入实际打印出来:

char *buffer = 0;
size_t buffer_len;
FILE *fp = open_memstream(&buffer, &buffer_len);
while(scanf("%d",&tmp) == 1) {
    fprintf(fp, "%d",tmp*10);
}
// write the whole buffer now
fwrite(buffer, 1, buffer_len, stdout);
// and free it
free(buffer);

在C ++中,你会以同样的方式使用std::stringstream,尽管使用<<来写入,而不是fprintf

答案 2 :(得分:0)

标准库中没有这样的功能。我建议将值推送到std::vector<int>,然后循环遍历:

std::vector<int> numbers;
...
numbers.push_back(tmp);
...
for (int n : numbers)
    printf("%d\n", n);

答案 3 :(得分:0)

我推测你想这样做是因为你的输出设备(printf)比你的输入设备(scanf)太慢了。这可能发生在很多嵌入式设备中。

没有库函数可以批量扫描您的数据,并在稍后的触发后打印它们,如您在描述中所述。

我建议你在循环扫描数据之前分配一些内存块。完成扫描后,使用循环打印它们。

Sudo代码:

data = malloc(size)

loop(size)
{
    *data = scanf();
    data++;
{
loop(size)
{
    printf(data++)
}