请问各位大佬,我用vs写的,为什么ch总是显示未初始化啊
#pragma warning(disable:4996) //函数弃用可用此代码#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char ch, filename;
printf("请输入文件地址:");
scanf_s("%s", filename, 20);
if (!(fp = fopen(filename, "r")))
{
printf("打开文件错误\n");
exit(0); //结束程序
}
while (ch != EOF)
{
ch = fgetc(fp); //就这里总是显示未初始化
putchar(ch);
}
fclose(fp);
} 从您提供的代码来看,您的问题是在循环中使用了未初始化的变量ch。
这是因为您在while循环中使用了未初始化的ch值进行比较。
为了解决这个问题,您可以在循环中进行初始化和更新ch的值。这里是修改后的代码:
#pragma warning(disable:4996) //函数弃用可用此代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char ch, filename;
printf("请输入文件地址:");
scanf_s("%s", filename, 20);
if (!(fp = fopen(filename, "r")))
{
printf("打开文件错误\n");
exit(0); //结束程序
}
ch = fgetc(fp); //在循环之前初始化ch
while (ch != EOF)
{
putchar(ch);
ch = fgetc(fp); //在循环中更新ch的值
}
fclose(fp);
}
这个修改将在进入循环之前初始化ch的值,并在循环内不断更新ch的值。这样,当文件读取到末尾时,ch将被赋值为EOF,从而跳出循环。 这段代码的问题似乎在于 while循环,因为变量 ch在使用之前没有初始化。
要解决这个问题,我们可以在 while`循环开始之前初始化 ch 变量。以下是更新后的代码:
#pragma warning(disable:4996) //函数弃用可用此代码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* fp;
char ch = '\0', filename;
printf("请输入文件地址:");
scanf_s("%s", filename, 20);
if (!(fp = fopen(filename, "r")))
{
printf("打开文件错误\n");
exit(0); //结束程序
}
while ((ch = fgetc(fp)) != EOF)
{
putchar(ch);
}
fclose(fp);
}
有用请设置最佳答案
页:
[1]