我正在编写一个程序,该程序将在文本文件中输出最多100个偶数整数。
这里是整个代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int main() {
FILE *fp;
int i;
if ((fp = fopen("even_up_to_100.txt", "w")) == NULL) {
perror("Write");
exit(1);
}
for (i = 1; i <= MAX; ++i) {
if (!(i % 2))
putw(i, fp);
}
fclose(fp);
if ((fp = fopen("even_up_to_100.txt", "r")) == NULL) {
perror("Read");
exit(2);
}
while (!feof(fp))
printf("%d ", getw(fp));
fclose(fp);
return 0;
}
输出(来自文本文件:] >>
" $ & ( * , . 0 2 4 6 8 : < > @ B D F H J L N P R T V X Z \ ^ ` b d
输出(从控制台窗口):
2 4 6 8 10 12 14 16 18 20 22 24 -1
请指出解决方案代码中的错误(如果有)。文本文件中有一些控制字符,在此处显示为空白。
我正在编写一个程序,该程序将在文本文件中输出最多100个偶数整数。这是完整的代码:#include
getw
/ putw
是二进制I / O函数,所以您应该以二进制模式打开文件("wb"
代替"w"
作为fopen
的模式参数,同样,"rb"
代替的"r"
)。字符26是ASCII Ctrl-Z,Windows(及其之前的DOS)将其用作文本文件的文件结束标记。因此,如果您使用的是这样的系统,则当您尝试从文件中读取数字26时,库会看到Ctrl-Z字节并将其视为文件的结尾。那可以解释为什么您的程序在24点之后会停止读取。以二进制模式打开会禁用此行为,还会避免其他各种问题,例如CR字符的处理。