当我运行这个小代码并在控制台上输入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;
}
答案 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]);