3

当我运行这个小代码并在控制台上输入 3 个整数时,由于 fwrite 语句,它不会按应有的方式打印出来。它仅在我按回车键一段时间后才会打印。帮助?PS:学习比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;
}
4

2 回答 2

4

这是因为fread读取二进制数据,而不是格式化文本,所以当你告诉它读取 3 个“整数”时,它会从标准输入读取 3*4=12 字节的原始数据。如果您键入“1”“2”“3”,则只有三个字节的文本,加上三个换行符。一旦你输入了 12 个字节,它可能会超过那个部分,但是你的程序可能会被破坏,假设你想要读取和写入实际的文本。

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

于 2013-06-23T09:25:31.680 回答
0

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

当您在控制台上输入这样的内容时

1 2 3

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

因此,您必须至少按 Enter 键 6 次,才能再读取 6 个字节。

更好地用于scanf()获取整数

scanf("%d %d %d", &size[0], &size[1], &size[2]);
于 2013-06-23T09:28:12.733 回答