2013-05-09 37 views
0

我有一个文件:发现多余的空格,而使用的fscanf

hello:12312 
Bye:333 
Hey:22 

,所以我使用的fscanf

FILE *file = fopen(argv[1], "r"); 

     if (file == 0) 
     { 
      printf("Could not open file\n"); 
     } 
     else 
     { 

      while(fscanf(file, "%[^:]:%d", word, &integer) != EOF) 
      { 
       printf("word: %s, integer: %d\n", word, integer); 
      } 

      fclose(file); 
     } 

读它,并且这是我得到:

word: hello, integer: 12312 
word: 
Bye, integer: 333 
word: 
Hey, integer: 22 

因此很明显,除了第一个单词外,还有一个额外的空格,为什么会发生这种情况?

回答

3

fscanf()

所有转换说明以外[,C,并且n和消耗试图解析输入之前丢弃所有前导空白字符。

\n将保持在"%d"之后的输入流。

为了校正添加的领先空间到格式speicifer跳过空白:

while(fscanf(file, " %[^:]:%d", word, &integer) == 2) 
{ 
} 

改变了!= EOF== 2防止接受格式"hello:""hello"线。

+0

得到你了,谢谢! – user1701840 2013-05-09 16:05:25

3

%[^:]将接受行结束。如果你想跳过把前导空格为word尝试:在你的字符串格式" %[^:]:%d"年初

" %[^:]:%d" 
1

添加空间。这将避免换行符的问题在scanf函数

while(fscanf(file, " %[^:]:%d", word, &integer) != EOF) 
1

因为当你使用* scanf()函数读取一个整数,后面的换行符不被消耗。