我试图了解如何使用 fscanf 处理一些不需要的输入。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *myFile;
myFile = fopen("../map1.map", "r");
if (myFile == NULL){
printf("Couldn't open file.\n");
exit(-1);
}
char buffer[16];
if (fscanf(myFile, "%15s", buffer) != 1){
printf("The file is not formated correctly.\n");;
fclose(myFile);
exit(-1);
}
}
我有这个代码。我想确保在这些情况下打印错误,然后退出程序(我不关心我只想退出的溢出字符会发生什么):
无法找到/打开文件。 (这有效)
缓冲区溢出。在这种情况下,我不希望它只抓取前 15 个字符。我想让程序退出。我还希望能够在程序稍后继续读取该文件。文件中是否有更多行也没关系。 (这是主要问题)。
我根本没有任何值(value)(这有效。)
我得到 2 个单词(例如:“hello”= 1 个单词,“hello world”= 2 个单词)(我也无法弄清楚)
我想知道如何测试这些东西。我使用什么比较等等。
我不是一个非常有经验的用户,所以请指出任何明显的缺陷,我会修复它们。
为了说得更清楚。我不想让这个工作成功。我想知道如果不起作用的话如何退出。这对于预期的输入来说效果很好。
最佳答案
对于 2. 您可以进行早期检测 -
int length;
fscanf(myFile, "%*[^\n]%n",&length);
if(length > 10)
//exit with failure
然后您可以再次将长度与 10
进行比较。请记住 fseek
返回到您使用的位置
fseek(myFile, -length, SEEK_CUR);
对于情况 4 - 因为您已经知道结尾,所以您所要做的就是阅读一个单词并检查您是否已阅读所有内容 -
fscanf(myFile, "%15s", buffer);
if (strlen(buffer) < length)
//return failure and exit
关于c - fscanf 对不需要的输入进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45830475/