在C中读取文本文件

时间:2018-04-20 02:56:12

标签: c scanf readfile

我的文本文件包含包含键值对的数据

(Ann, 67) (Jhon, 78) (Mason, 89)
(Simon, 34) (Ruko, 23)

每个项目用空格分隔,逗号后面有空格

我想阅读每个元素并通过

打印这些第一项
(Ann, 67)
(Jhon, 78)
(Mason, 89)
(Simon, 34)
(Ruko, 23)

我尝试使用

while (fscanf(file, "%s", value) == 1) {
    printf(value);
}

但不是用逗号分隔每个值

(Ann,
67)
(Jhon,
78)
(Mason,
89)

我该怎么做

3 个答案:

答案 0 :(得分:1)

制作数据文件时,可以使用逗号。这是一个示例:

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    FILE *inFile;
    char name[20], str[80], *i;
    int age;

    inFile = fopen("test.txt", "r");
    if (inFile == NULL){
        printf("Error opening file");
        exit(1);
    }

    while(fgets(str, 80,inFile) != NULL){
        i = strtok(str, ", ");
        strcpy(name, i);
        puts(name);

        i = strtok(NULL, ", ");
        age = atoi(i);
        printf("%d\n", age);
    }

    return 0;
}

文字档案

Ann, 67
Jhon, 78
Mason, 89
Simon, 34
Ruko, 23

答案 1 :(得分:1)

正如我在回答中提到的,scanf family of functions具有简单的模式匹配,可用于读取您的输入:

char text[32];
int value;

while (fscanf(file, " (%32[^,], %d)", text, &value) == 2)
{
    printf("Got (%s, %d)\n", text, value);
}

使用的scanf格式说明:

  • " "匹配任何前导空格
  • "("匹配左括号
  • "%32[^,]"匹配(最多32个)字符,但逗号
  • ","与逗号匹配
  • "%d"匹配整数值
  • ")"匹配右括号

答案 2 :(得分:0)

而不是使用

while(fscanf...)

您可以尝试以下方式:

while ((line=getline(&line, &len, file)) != -1) {
    printf("%s", line);
}