c - fscanf 对不需要的输入进行错误处理

标签 c

我试图了解如何使用 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);
    }
}

我有这个代码。我想确保在这些情况下打印错误,然后退出程序(我不关心我只想退出的溢出字符会发生什么):

  1. 无法找到/打开文件。 (这有效)

  2. 缓冲区溢出。在这种情况下,我不希望它只抓取前 15 个字符。我想让程序退出。我还希望能够在程序稍后继续读取该文件。文件中是否有更多行也没关系。 (这是主要问题)。

  3. 我根本没有任何值(value)(这有效。)

  4. 我得到 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/

相关文章:

c - 具有扩展语法的 POSIX 正则表达式与应有的位置不匹配

C - 在闪存中存储全局变量?

C - 在 strdup() 之后释放内存

c - 这个程序有什么错误?

c - 如何释放单链表中的内存

python - 使用 Python C API 调用 C 函数两次时出现段错误

c - 警告 : implicit declaration of function 'calloc'

c - 连接单独的整数值以形成一个整数

c - 查找可用端口以使用 BSD 打开伪终端

c - 如何在 lib 错误中获取未解析的外部?