首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C中检索数据而不是整行?

如何在C中检索数据而不是整行?
EN

Stack Overflow用户
提问于 2009-11-15 05:22:46
回答 4查看 264关注 0票数 2

现在我使用:

代码语言:javascript
复制
    char record[BUFLEN];
    if (fgets(record, BUFLEN, fp) != NULL) {

      /* some code */

    }

要从输入中获取行,请执行以下操作:

代码语言:javascript
复制
city=Boston;name=Bob;age=35
city=New York;name=Michael;age=29

我是否可以在C中使用其他东西,让我得到的不是整个行,直到'\n‘,而是像"city=Boston“和"name=Bob”这样的分隔对,等等?

EN

回答 4

Stack Overflow用户

发布于 2009-11-15 06:34:08

这看起来是可以使用scanf()的相对少见的情况之一。

您可以尝试:

代码语言:javascript
复制
while (fscanf(fp, "%[^=]=%[^;\n]", name, value) == 2)
{
    if ((c = fgetc(fp)) == EOF)
        break;
    else if (c == ';')
        ...continue with same line...
    else if (c == '\n')
        ...wrap up current line...
    else
        ...congratulations - format error of some sort...
}

或者,继续使用'fgets()‘,但在类似下面的循环中使用'sscanf()’。

有效的演示代码:

代码语言:javascript
复制
#include <stdio.h>
int main(void)
{
    char name[20];
    char value[20];

    while (fscanf(stdin, "%19[^=]=%19[^;\n]", name, value) == 2)
    {
        int c;
        if ((c = fgetc(stdin)) == EOF)
            break;
        else if (c == ';')
            printf("name = [%s]; value = [%s]\n", name, value);
        else if (c == '\n')
            printf("name = [%s]; value = [%s]\n", name, value);
        else
            fprintf(stderr, "Ooops!\n");
    }
    return(0);
}
票数 3
EN

Stack Overflow用户

发布于 2009-11-15 05:27:30

您可以使用fgetc一次读取一个字节。

读到一个数组中,然后读到;在另一个数组中

代码语言:javascript
复制
        do {
          c = fgetc (pFile);

          if (c == ';') 
          // etc

        } while (c != EOF);
票数 2
EN

Stack Overflow用户

发布于 2009-11-15 05:26:14

查看strtok()函数。连续调用将从字符串中检索每个令牌。

使用您的示例:

代码语言:javascript
复制
char    record[BUFLEN];
if(fgets(record, BUFLEN, fp) != NULL) {
    char *token;

    token = strtok( record, ";" );
    while ( token != NULL )
    {
            doSomethingWith( token );
            token = strtok( NULL, ";" );
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1735653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档