现在我使用:
char record[BUFLEN];
if (fgets(record, BUFLEN, fp) != NULL) {
/* some code */
}
要从输入中获取行,请执行以下操作:
city=Boston;name=Bob;age=35
city=New York;name=Michael;age=29
我是否可以在C中使用其他东西,让我得到的不是整个行,直到'\n‘,而是像"city=Boston“和"name=Bob”这样的分隔对,等等?
发布于 2009-11-15 06:34:08
这看起来是可以使用scanf()的相对少见的情况之一。
您可以尝试:
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()’。
有效的演示代码:
#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);
}
发布于 2009-11-15 05:27:30
您可以使用fgetc一次读取一个字节。
读到一个数组中,然后读到;在另一个数组中
do {
c = fgetc (pFile);
if (c == ';')
// etc
} while (c != EOF);
发布于 2009-11-15 05:26:14
查看strtok()函数。连续调用将从字符串中检索每个令牌。
使用您的示例:
char record[BUFLEN];
if(fgets(record, BUFLEN, fp) != NULL) {
char *token;
token = strtok( record, ";" );
while ( token != NULL )
{
doSomethingWith( token );
token = strtok( NULL, ";" );
}
}
https://stackoverflow.com/questions/1735653
复制相似问题