fwrite不会向stdout打印任何东西

时间:2013-06-23 09:12:44

标签: c stdout fwrite

当我运行这个小代码并在控制台上输入3个整数时,由于fwrite语句,它不会打印出来。只有在我继续按下输入一段时间后才打印。救命? P.S:学习比scanf和printf更快的方法。

#include<stdio.h>
int main(){
    int size[3];
    fread(&size,sizeof(int),3,stdin);
    fwrite(&size,sizeof(int),3,stdout);
    fflush(stdout);
    return 0;
}

2 个答案:

答案 0 :(得分:5)

这是因为fread读取二进制数据而不是格式化文本,因此当您告诉它读取3“整数”时,它将从stdin读取3 * 4 = 12字节的原始数据。如果键入“1”“2”“3”,那么只有三个字节的文本,再加上三个换行符。键入十二个字节后,它可能会超过该部分,但是如果您想要读写实际文本,那么您的程序可能会被破坏。

你的意思是说你“比scanf和printf更快地学习。”嗯,这不是一个更快的方式,它只是一个破碎的方式。如果您在使用scanf&amp ;;的某些代码中遇到性能问题printf,请问一个单独的问题,我们可以提供帮助。

答案 1 :(得分:0)

int的大小为4个字节,因此fread()将尝试读取12个字节(4 * 3)。

在控制台上输入类似内容时

1 2 3

它是6个字符= 3个数字+ 2个空格+ 1 \ n

因此,您必须按住输入6次,以便再读取6个字节。

最好使用scanf()将整数作为

scanf("%d %d %d", &size[0], &size[1], &size[2]);