如何在c中读取文本文件,然后将每一行拆分为标记?

时间:2015-05-06 12:13:05

标签: c string pointers stdin

输入文本文件每行有一些数字,数字按空格分割。前两行只有一个数字,后面的行有三个。我想要做的是读取输入的每一行并存储这些数字。

这是我到目前为止所得到的:

    int
    main(int argc, char *argv[]) {
        int n = 0;
        char buff[MAX_STRING_LEN]; //MAX_STRING_LEN is defined as 64
        while (fgets(buff,MAX_STRING_LEN, stdin) != NULL) {
            char temp;
            if (n == 0) {
                sscanf(buff, "%s", &temp);
                int h_num = (int)temp;
            } else if (n == 1) {
                sscanf(buff, "%s", &temp);
                int s_num = (int)temp;
            } else {
                sscanf(buff, "%s", &temp);
                char *token;
                token = strtok(&temp, " ");
                int i = 0;
                int a,b,c;
                while (token != NULL) {
                    if (i == 0) {
                        a = (int)token;
                        token = strtok(NULL, " ");
                    } else if (i == 1) {
                        b = (int)token;
                        token = strtok(NULL, " ");
                    } else {
                        c = (int)token;
                        token = strtok(NULL, " ");
                    }
                    i++;
                }
            }
            n++;
        }
        return 0;
    }

我用来测试代码的print语句如下:

    printf("%d\n",h_num);
    printf("%d\n%d\n%d\n",a,b,c);

我创建了一个这样的文本文件:

23
34
4 76 91

但输出不是我的预期,它是我认为的指针的地址。 (我再次陷入指针=() 有人可以帮我指出问题是什么吗?欣赏它。

1 个答案:

答案 0 :(得分:0)

在你的代码中,我可以看到,

int h_num = (int)temp;

int s_num = (int)temp;

不,这不是您将 aphanumeric字符串转换为int的方式。

您需要使用strtol()来实现此目的。

然后,

sscanf(buff, "%s", &temp);

错了。 tempchar,您必须使用%c

我建议采用更好的方法:

  1. 使用fgets()
  2. 从文件中读取完整的一行
  3. 使用strtok()将输入标记为输入,使用 space )作为分隔符,然后将标记(如果不为NULL)转换为{ {1}}使用strtol()
  4. 继续,直到返回的令牌为NULL
  5. 在这种情况下,您的代码将更加泛型,因为不需要单独关注每个int中的数字线。