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
答案 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++)
}