2014-02-23 100 views
0

想象我有这样的.txt文件:几个字符串

HEY 
What's your name 
My name is xx 

我如何才能让,在我的C程序,以SCANF每一行成不同的字符串?

因为如果我做

fscanf(myfile, "%s", string) 

我可以用一句话只扫描字,和不同的线将不被认可......

什么好办法,我可以做到这一点?

回答

0

您可以使用fgets从文件中连续读取行。但是,您必须事先知道一条线的最大长度。

#define MAX_LEN 100 

FILE *fp = fopen("myfile.txt", "r"); 
char line[MAX_LEN]; 

while(fgets(line, MAX_LEN, fp) != NULL) { 
    // process line 
} 

fclose(fp); 

这里,fgets(line, MAX_LINE, fp)意味着fgets将从流fp读至多MAX_LINE - 1字节并将其存储在缓冲器中由line指向。一个字节是为空字节保留的,最后附加fgetsfgets将返回,如果一个新行被读取,并存储到缓冲区line。因此,如果要从line中删除换行符,则应在上述while循环中执行以下操作。

line[strlen(line) - 1] = '\0'; // overwrite newline character with null byte 
1

e.g

#include <stdio.h> 

int main(){ 
    char string[128]; 
    FILE *myfile = fopen("data.txt", "r"); 
    while(1==fscanf(myfile, " %127[^\n]", string)){ 
     printf("%s\n", string); 
    } 
    fclose(myfile); 
    return 0; 
}