Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在用C打开文件时遇到问题_C_File_Fopen - Fatal编程技术网

我在用C打开文件时遇到问题

我在用C打开文件时遇到问题,c,file,fopen,C,File,Fopen,我假设我有编译问题,但我想确定这不是我的错 我将我的代码与前几天我制作的一个程序中的其他代码进行了比较,实际上我没有发现任何差异 FILE *f; f = fopen("gps.txt","r"); if (f == NULL){ printf("Couldn't open the file."); return 0; } int i= 0; int n; while(fscanf(f,"%c %d %d %d %c %d %d %d %d %d %d",&gps[i]

我假设我有编译问题,但我想确定这不是我的错

我将我的代码与前几天我制作的一个程序中的其他代码进行了比较,实际上我没有发现任何差异

FILE *f;
f = fopen("gps.txt","r");

if (f == NULL){
    printf("Couldn't open the file.");
    return 0;
}
int i= 0;
int n;
while(fscanf(f,"%c %d %d %d %c %d %d %d %d %d %d",&gps[i].sirina,&gps[i].stepen,&gps[i].min,&gps[i].sek,&gps[i].duzina,&gps[i].s1,&gps[i].m1,&gps[i].sek1,&gps[i].visina,&gps[i].brzina,&gps[i].sateliti)==11)
    i++;

n = i;
printf("%d",gps[1].sek);
档案资料:(25 55 22 N 123 213 123 S 25 23 2

123 123 N 234 25 53 S 123 5 1

12 41 3 N 12 5 13 S 1 2 4)

这段代码的结果总是0(这只是为了检查我是否可以继续执行我的程序)。文件中写入了一些信息,我反复检查是否每次都保存了这些信息,但我的程序仍然输出0。在我几天前编写的同一代码中,输出是正常的,包括文件是相同的


我很乐意知道是否有编译问题,或者我的代码中是否有错误。谢谢

根据您的输入,fscanf中的字符串是错误的。 您可以使用以下字符串:

%c %d %d %d %c %d %d %d %d %d %d"
%d %d %d %[^A-Z] %c %d %d %d %[^A-Z] %c %d %d %d
这是输入行的示例: 25 55 22 N 123 213 123 S 25 23 2

您需要以下字符串:

%c %d %d %d %c %d %d %d %d %d %d"
%d %d %d %[^A-Z] %c %d %d %d %[^A-Z] %c %d %d %d
根据给定的示例,使用%d读取25,55,22

然后使用
%[^A-Z]
跳过空格等,然后使用
%c
读取N或S。
空格也是一个字符,你需要注意它。

如果你想读取文件的内容,请查看
fread
函数而不是
fscanf
。一个可能的问题是
fscanf
格式以
%c
开头。此格式说明符不会跳过前导空格,例如前一行结尾的换行符。在格式字符串中添加前导空格。我假定您的意思是“fopen的结果始终为0”。这意味着找不到该文件。您可能需要添加路径信息。根据问题发生的位置,请使用文件内容或编写文件的代码回答您的问题。如果你能提供一个更好的服务,它会让你更愿意成为访客。请拿ans学习。我应该做一个程序,在那里我应该从文件中读取,例如,所有文件中最大的一个,所以我请求通过循环来完成。如果你能理解我的话,这不仅仅是单纯的阅读@LouisDurandTrue,但是你需要存储
%[^A-Z]
的结果,不能用
%s
代替
%[^A-Z]%c
?我猜他想得到北或南AKA N/s,而不是所有的空格等。使用%[^A-Z],你不需要保存它。