这非常简单,但我只是遇到了问题。
文本文件有标题
如,
# Avizo BINARY-LITTLE-ENDIAN 2.1
define Lattice 496 384 470
Parameters {
AlignTransform {
slice0000 0 -0 -30 -1,
slice0001 0 -0 -30 -1,
slice0002 0 -0 -30 -1,
我正在尝试使用fscanf读取每一行。
int i;
for ( i = 0; i < 10; i++ ) {
fscanf(fp, "%s\n", buf);
printf("%d) %s\n",i,buf);
}
导致此
0) #
1) Avizo
2) BINARY-LITTLE-ENDIAN
3) 2.1
4) define
5) Lattice
6) 496
7) 384
8) 470
9) Parameters
所以它解析空格而不是换行符。不确定发生了什么。
答案 0 :(得分:8)
我建议您使用fgets
,但如果您坚持使用fscanf
:
fscanf(fd, "%[^\n]\n", buff);
这将读完整行。
答案 1 :(得分:6)
%s
中的fscanf
说明符会读取单词,因此在到达空格时会停止。
使用fgets
阅读整行。
答案 2 :(得分:1)
虽然%s可能意味着“字符串”,但fscanf(作为scanf)并不是一个贪婪的东西,你应该告诉它分隔符是“新行”。 而且,您最好设置maxinum缓冲区大小以防止缓冲区溢出。
#include <stdio.h>
#define NAME_MAX 80
#define NAME_MAX_S "80"
int main(void)
{
static char name[NAME_MAX + 1]; // + 1 because of null
if(scanf("%" NAME_MAX_S "[^\n]", name) != 1)
{
fputs("io error or premature end of line\n", stderr);
return 1;
}
printf("Hello %s. Nice to meet you.\n", name);
}