我感到沮丧,我不知道我在这里做错了什么 我仍然在代码中有很多事情要做但我甚至无法打开文件来继续我的工作。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char letter;
FILE *fp;
fp=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
if(fp==NULL)
{
printf("error");
getch();
exit(1);
}
while(fscanf(fp,"%d",&letter)!=EOF)
putchar(letter);
getch();
fclose(fp);
}
仍然打印错误
答案 0 :(得分:0)
好的,首先让我们来看看你的文件路径。有两种方法可以从本地存储中访问文件:
如果文件与您的应用程序具有相同的根文件夹,则相对地址
绝对地址如果文件位于您计算机存储空间的确定位置
我发现您正在尝试使用绝对地址来读取文件。您的路径是正确的,但您必须注意C中的字符串格式,因为\字符可能被解释为其他内容。
我建议改用(双反斜杠)
input=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
这将阻止字符串格式化解释。
其次,EOF只是一个预定义的宏常量,我认为它等于-1,因此你的while(!( - 1))代码在文件结束之前不是一个很好的读取标识。
为了从文件中读取直到你到达它的结尾,我会考虑fscanf()的这个属性: fscanf()在到达文件末尾时返回EOF。
while(fscanf(input,"%ch",&letter) != EOF) {
putchar(letter);
}
这种从文件中读取的方式应该可以完成。
答案 1 :(得分:0)
从文本文件中读取所有内容并将其内容存储到缓冲区中:
首先,您应该计算文本文件中有多少个字符:
size_t get_file_len(FILE *fp)
{
size_t num = 0;
while (fgetc(fp) != EOF)
num++;
return (fseek(fp, 0, SEEK_SET) == 0 ? num : 0);
}
然后为足够大的缓冲区分配内存并读取所有字符:
char *load_text(const char *path)
{
char *buf = NULL;
FILE *fp = NULL;
size_t num = 0;
size_t i = 0;
int c = 0;
/* open the file in text mode */
fp = fopen(path, "r");
if (!fp)
return NULL;
/* if the file was empty or if an error occurred, return error */
if ((num = get_file_len(fp)) == 0) {
fclose(fp);
return NULL;
}
buf = malloc(num + 1);
if (!buf) {
fclose(fp);
return NULL;
}
while ((c = fgetc(fp)) != EOF)
buf[i++] = (char)c;
/* ensure that the string is null-terminated */
buf[i] = '\0';
fclose(fp);
return buf;
}
另外,在C中,所有转义序列都以'\'(反斜杠)开头,所以如果你想在字符串或char中写反斜杠,你应该把它写成'\\'(双反斜杠):
input=fopen("C:\\Users\\LENOVO\\Desktop\\data.txt","r");
答案 2 :(得分:-2)
非常简单:
while(!feof(input)){
fscanf(input,"%c",&letter);
putchar(letter);
}
并记得使用fclose(输入);
关闭文件