用C打开文件 完全编辑:

用C打开文件 完全编辑:,c,data-files,C,Data Files,我越来越沮丧,我不知道我在这里做错了什么 代码中还有很多事情要做,但我甚至无法打开一个文件继续我的工作 #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("e

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

#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);
}‪
#包括
#包括
#包括
void main()
{
字符字母;
文件*fp;
fp=fopen(“‪‪‪C:\\Users\\LENOVO\\Desktop\\data.txt,“r”);
如果(fp==NULL)
{
printf(“错误”);
getch();
出口(1);
}
while(fscanf(fp、%d、&letter)!=EOF)
putchar(字母);
getch();
fclose(fp);
}‪
路径图片:

仍然打印错误

这里非常简单:

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

并记住使用fclose(输入)关闭文件

>好的,首先让我们看看你的文件路径。有两种方法可以从本地存储访问文件:

相对地址如果文件与应用程序具有相同的根文件夹

绝对地址如果文件位于计算机存储器的确定位置

我看到您试图使用绝对地址来读取文件。您的路径是正确的,但必须注意C中的字符串格式,因为\字符可能会被解释为其他字符

我建议改用这个(双反斜杠)

这将阻止字符串格式的解释

其次,EOF只是一个预定义的宏常量,我认为它等于-1,所以while(!(-1))代码在文件结束之前都不是一个好的读取方法

< >为了从文件读取直到到达其结束,我将考虑fScFF()的这个属性: fscanf()到达文件末尾时返回EOF。


这种读取文件的方法应该可以完成这项工作

从文本文件读取所有内容并将其内容存储到缓冲区:

首先,您应该计算文本文件中有多少个字符:

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


while(EOF!=fscanf(输入、%c、&letter))putchar(letter)感谢您的帮助我们不是辅导服务。你有没有一个具体的问题没有在你的C语言书中回答?我只是问了一个问题(我知道EOF是做什么的,但我现在还不知道如何使用它),我没有要求一个完整的程序code@Bolar您的新代码错误,请仔细阅读注释<代码>而(!EOF)
始终为false。重要的一点是始终检查
scanf
函数系列的返回值。我建议您阅读手册页中导致您出现问题的函数。@pmg我编写了
,而(!feof(input))
有效!您可以用C-Gottfried进行验证。更正了这些行,它仍然会打印“未找到文件”,这很烦人……请确保您的文件具有相同的路径或扩展名
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;
}
input=fopen("‪C:\\Users\\LENOVO\\Desktop\\data.txt","r");