gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:44:44 28 4
gpt4 key购买 nike

我的程序应该从 .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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com