读取一行并转换为c中的字符串

时间:2014-04-10 11:52:53

标签: c

这是我在这里发表的第一篇文章,所以我真的不知道如何以正确的格式发布这里的内容。我有一个问题,如何从文件中读取一行,并将一些单词读成字符串,一些单词作为Int。

    int check = sscanf(read, "%s %d", string, &integer);
    printf("%s, %d", string, integer);

以上是我的所作所为。输入是“oneword 1”。我得到的是“(null)4196448”。那我怎么能正确地做到这一点?谢谢

这是我的代码的一部分。

    int i;
for (i = 1; i <= 3; i++)
    {
            char read[MAX_LENGTH_INPUT];
            fgets(read, sizeof(read), stdin);
            int check2 = sscanf(read, "%s %d", word, &number);
            printf("%s %d\n", word, number);
    }

所以for循环是在.in文件中扫描三行。我能这样做吗? 这是.in文件,它是输入。

    oneword 1
    twoword 2
    thirdword 3

输出

    (null) 4196448
    (null) 4196448
    (null) 4196448

2 个答案:

答案 0 :(得分:1)

同样在您的代码中int check2 = sscanf(read, "%s %d %d", word, &number);格式说明符为3但参数为2。

如果file包含

等数据
oneword 1
secondword 2
thirdword 3
fourthword 4

然后

#include <stdio.h>

int main ()
{
    FILE *fp = fopen("file", "r");
    char read[100];
    int integer;
    char string[64];
    while (fgets(read, sizeof(read), fp) != NULL) 
    {
        int check = sscanf(read, "%s %d", string, &integer);
        if (check == 2) {
             printf("%s, %d\n", string, integer);
         }
         else{
             printf("Failed to scan all values\n");
         }
    }
}

输出

oneword, 1
secondword, 2
thirdword, 3
fourthword, 4

您可以在此处修改fgets,只需将stdin替换为行fp中的stdin

,即可从while (fgets(read, sizeof(read), fp) != NULL)获取意见

答案 1 :(得分:0)

您正在使用sscanf

char *类型读取数据,并根据参数格式将它们存储到附加参数给出的位置,就像使用scanf一样,但是从字符串而不是标准输入读取(stdin) )。

您需要使用fscanf,并且代码中的read应该是指向文件的指针。