用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");