c - 需要帮助解决 fscanf 和 fprintf 问题

标签 c scanf

我的程序应该从 .txt 文件中读取 4 个数字,将这些数字加 10,然后将其打印回来。我有一个函数加载带有四个数字的文本文件,然后另一个函数添加 10 并附加该文件。该程序目前可以运行,但我对 addTen() 函数感到非常困惑。

为什么我不需要再次 fscanf 文件?我的函数如何知道 .txt 文件中保存的值?当我试图让我的程序使用 EOF 指示器时,我偶然发现了这一点。

#include <stdio.h>

// function prototypes
void loadTextFile(FILE *file);
void addTen(FILE *file);

// begin main function
int main(void){

    FILE *text = fopen("question6.txt","w");

    if(text == NULL)
    {
        printf("question6.dat cannot be opened!\n");
        fprintf(stderr, "Error opening the fil!\n");
    }

    else
        printf("\nquestion6.dat was opened successfully for Writing.\n\n");

    loadTextFile(text);
    addTen(text);

    fclose(text);

    return 0;
} // end main function


void addTen(FILE *file){

    int i=0;
    int number[4];

    for (i=0;i<4;i++)
    {   
        fprintf(file, "%d\n", number[i]+10);
        printf("\n\t%d was written to the file\n", number[i]+10);
    }

} 

// function to load the .txt file with array values so we may execute main on any computer. 
void loadTextFile(FILE *file){


    int numberArray[4]={56, 23, 89, 30};

    int i=0;

    for(i=0;i<4;i++)
    {
        fprintf(file, "%d\n", numberArray[i]);
        printf("\n\t%d was written to the file\n", numberArray[i]);

    }

    printf("\nThe data was successfully written\n");

} // end function loadTextFile

最佳答案

The program currently works

不,不是!

您的 addTen 函数具有未定义的行为。它正在从未初始化的数组输出值。如果它对您“有效”,那可能是因为它恰好与您在丢弃之前在 loadTextFile 中填充的局部变量 numberArray 位于堆栈的同一部分。你根本不能依赖这个。

我建议您将数组传递到函数中:

void addTen(int array[], int size) {
    for (int i=0; i < size; i++) {   
        array[i] += 10;
    }
}

void loadTextFile(FILE *file, int array[], int size) {
    for (int i=0; i < size; i++) {   
        fscanf(file, "%d", &array[i]);
    }
}

也许还有一个单独的函数来打印数据:

void printArray(FILE* fp, int array[], int size) {
    for (int i=0; i < size; i++) {   
        fprintf("%d\n", array[i]);
    }
}

现在调用全部:

int array[4];
loadTextFile(text, array, 4);
addTen(array, 4);
printArray(text, array, 4);

请注意,您的程序框架中还存在一些其他错误。一个问题是您使用 openmode "w" 打开输入文件,这将以只写方式打开文件,并截断其当前内容。

最好先打开它进行读取("r"),加载数据并关闭它。然后打开写入并输出修改后的数据。

关于c - 需要帮助解决 fscanf 和 fprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53401438/

相关文章:

c - printf 在 C 中给我错误的输出

关于错误 : lvalue required as unary '&' operand 的困惑

c - getchar() 会导致错误,而 scanf 不会

c - 功能参数太少。我哪里出错了是什么意思?

c - 复制一个指针,然后返回第一个有什么用

c - scanf() 将换行符保留在缓冲区中

c - 从命令行读取并使用 sscanf 转换为整数

c - 从字符串中获取整数

c - 如何正确分配结构体和某些变量?

c - 如何用 C 读取 .txt 文件并将数字存储到二维数组中