【问题标题】:I have problems with opening file in C我在 C 中打开文件时遇到问题
【发布时间】:2019-10-02 09:19:53
【问题描述】:

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

我已经将我的代码与我几天前制作的程序中的其他代码进行了比较,我确实找不到任何区别。

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 123 N 234 25 53 S 123 5 1

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

此代码的结果始终为 0(这只是为了检查我是否可以继续执行我的程序)。文件中写入了信息,我仔细检查了我每次都保存了它,但我的程序仍然输出 0。在我几天前编写的相同代码上,输出没问题,包括文件相同的事实。

我很高兴知道是否存在编译问题或者我的代码中是否存在错误。谢谢!

【问题讨论】:

  • 如果您要读取文件的内容,请查看 fread 函数而不是 fscanf。
  • 一个可能的问题是fscanf 格式以%c 开头。此格式说明符不跳过前导空格,例如结束前一行的换行符。在格式字符串中添加前导空格。
  • 我假设您的意思是“fopen 的结果始终为 0”。这意味着找不到该文件。您可能需要添加路径信息。
  • 根据问题发生的位置,请edit您对文件内容或编写文件的代码提出问题。如果您提供minimal reproducible example,它会让您更愿意访问。请收下tour 和学习How to Ask。
  • 我应该制作一个程序,我应该从文件中读取,例如,所有这些中的最大数字,所以我要求通过循环来做到这一点。如果你能理解我的话,这不仅仅是纯粹的阅读。 @LouisDurand

标签: c file fopen


【解决方案1】:

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

%c %d %d %d %c %d %d %d %d %d %d"

这是输入行的示例: 25 55 22 N 123 213 123 S 25 23 2

您需要以下字符串:

%d %d %d %[^A-Z] %c %d %d %d %[^A-Z] %c %d %d %d

根据给定的示例,您使用 %d 读取 25,55,22。

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

【讨论】:

  • 是的,但是你需要存储%[^A-Z]的结果,不能%s代替%[^A-Z] %c做这个工作吗?
  • 我猜他想获得北或南 AKA N/S 而不是所有的空间等。通过使用 %[^A-Z],你不需要保存它。跨度>
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2018-08-15
相关资源
最近更新 更多