解析一个特定的数字

时间:2011-03-06 17:32:26

标签: c string parsing integer

我知道这是一个基本问题......但我已经坚持了一个小时。我是C的新手。我一直试图从一个特定方式的文本文件中解析一些整数。这是一个例子:

A 123,1

B 456,2 

N 980,2

我想把字母和逗号后的数字丢掉。因此,我只有123,456和980.我一直卡在第一部分(抛出字母,中间的空白区域一直在拧我:()。我知道有很多帖子这有点类似,但我似乎无法得到它。这是我的代码到目前为止(test.txt包含输入值)。

int main(void)
{
    FILE *rFile = fopen ("test.txt", "rt");
    char input[20];

    if (rFile == NULL) {
        printf("Input file could not be located");
        return -1;
    }

    while (fscanf(rFile, "%s \n", input) > 0)
    {
     printf("%s", input);
    }
    fclose(rFile);

    return 0;
}

这显然不完整。我解决这个问题的方法是取输入字符串(包括空格),然后用strtok剪掉中间部分。但是,我甚至无法正确解析文本文件的每一行。

3 个答案:

答案 0 :(得分:3)

scanf适用于选择性地仅读取部分输入。

int num;
scanf("%*c %d,%*d",&num);
printf("%d\n",num);

scanf忽略%d之前的空格,并在格式字符串中添加星号(例如在%*c%*d中)使其读入然后丢弃该令牌,让我们免于指定变量来存储我们不需要的输入部分。

答案 1 :(得分:2)

scanffscanf也可以解析单个字符和整数。它忽略了实体之前的空白。

char c ;
int n1 ;
int n2 ;

// ...

while (fscanf(rFile, "%c %d,%d ", &c, &n1, &n2) > 0)
{
    printf("%d\n", n1);
}

答案 2 :(得分:0)

如果您要加载整行文字,包含空格,最好使用fgets代替fscanf

char* fgets (char* stringBuffer, int numberOfCharacters, FILE* fileStream);

fgets将继续阅读,直到满足以下条件之一:

  • 到达换行符
  • 到达文件结尾
  • 达到字符数(减1)

在您的示例中使用20个字符的字符串缓冲区,您可以使用以下内容:

while (fgets(input, 20, rFile)) {
  printf("%s", input);
}

也就是说,junjanes解决方案可能仍然更适合您的确切问题。