0

完整编辑:

我很沮丧,我不知道我在这里做错了什么我仍然在代码中要做很多事情,但我什至无法打开文件来继续我的工作。

#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);
}‪

路径图片:http: //imgur.com/a/YwFYy

仍然打印错误

4

3 回答 3

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 中,所有转义序列都以“\”(反斜杠)开头,因此如果您想在字符串或字符中编写反斜杠,则应将其写为“\\”(双反斜杠):

input=fopen("‪C:\\Users\\LENOVO\\Desktop\\data.txt","r");
于 2017-05-20T21:40:28.210 回答
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);
}

这种从文件中读取的方式应该可以完成这项工作。

于 2017-05-20T19:47:41.470 回答
-2

这里很简单:

    while(!feof(input)){
    fscanf(input,"%c",&letter);
    putchar(letter);
    }

并记得使用 fclose(input) 关闭文件;

于 2017-05-20T19:07:28.073 回答