在c中的文件中最多写入n个偶数,putw()函数错误

问题描述 投票:-1回答:1

我正在编写一个程序,该程序将在文本文件中输出最多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 #include #define MAX 100 int main(){FILE * fp; ...

c file-handling
1个回答
1
投票
因为getw / putw是二进制I / O函数,所以您应该以二进制模式打开文件("wb"代替"w"作为fopen的模式参数,同样,"rb"代替的"r")。

字符26是ASCII Ctrl-Z,Windows(及其之前的DOS)将其用作文本文件的文件结束标记。因此,如果您使用的是这样的系统,则当您尝试从文件中读取数字26时,库会看到Ctrl-Z字节并将其视为文件的结尾。那可以解释为什么您的程序在24点之后会停止读取。以二进制模式打开会禁用此行为,还会避免其他各种问题,例如CR字符的处理。

© www.soinside.com 2019 - 2024. All rights reserved.