从C中的文本文件中查找并保存一个整数

时间:2018-08-14 09:22:14

标签: c file file-handling

我是编程和C语言的新手。我有一些文本文件,其中包含一些随机文本和一个我想查找并保存的整数。文本文件看起来像这样(在这种情况下,我只想保存23,而不是56):

# this is a comment
23
this is some random text
56

这是我的代码:

    int *num = malloc(sizeof(int));
    *num = fgetc(f);

    while(!feof(f)){
        *num = fgetc(f);
        if(isdigit(*num)){
            break;
        }
    }

    if(!isdigit(*num)){
        printf("Error: no number found.\n");
        free(num);
    }
    else{
        printf("%c\n", *num);
    }

我现在有点卡住,我的程序只打印出数字2:/ 非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

正如@pbn所说,最好使用sscanf

但是,如果您真的想要,可以通过一次读取一个字符来做到这一点,但是您需要自己“构建”整数,将字符转换为整数,跟踪自己的情况并用数字乘以10的幂来表示您已经拥有的数字。

类似这样的东西(不是完整的代码,只是为了让您入门):

int c;
int num = 0;

while (c = fgetc(f)) {
    if(!isdigit(c)) {
        break;
    }
    num = (num * 10) + (c - '0');
}

c- '0'部分是将整数的文本表示形式转换为整数本身。 0是字符48,1是49,依此类推。

这是假设在带有数字的行上,您只有数字,而不是数字和非数字字符的组合。

此外,请勿使用correlation between two raters

答案 1 :(得分:1)

一个选项可能是使用getlinesscanf函数。我认为文本行不包含数字:

#include <stdio.h>

int main() {
    int value, matched = 0;
    char *line = NULL;
    size_t size;
    while(getline(&line, &size, stdin) != -1) {
        if ((matched = sscanf(line, "%d", &value)) != 0) 
            break;
    }
    if (matched) 
        printf("value: %d\n", value);
    return 0;
}

此部分:

 while(getline(&line, &size, stdin) != -1) { 

将尝试逐行读取整个流。 下一行使用sscanf返回值(成功匹配和分配的输入项数)来确定是否找到整数值。如果是这样,它将停止读取流。

答案 2 :(得分:0)

程序中的一种简单方法是,一旦找到数字,就不要停止继续,直到找到下一个“”,“ \ n”,“ \ 0”为止。然后添加Number = Number * 10 +(* num);,将Number定义为全局或其他内容。