C语言 fgets()忽略文本文件中行首字母.在添加空格时工作



我写了一个程序来重新排列文件中的文本。我使用fegts()将数据逐行复制到buffer中。一切正常,只是它总是从下面的文本文件

中省略第4行的第一个字符
 O     0.580533    -1.111576     1.827241
 N     0.791283    -0.030547     2.529271
 O     0.938920    -0.043192     3.722388
Eu     0.387757     0.171327    -0.654089
 N    -2.454117     0.553935    -1.831953
 O    -3.555931     0.702353    -2.289337
 O     0.859520     1.403791     1.815420
 O     2.535343     1.144752    -2.164160
 N     2.927953    -0.016122    -2.615146
 O     3.864559    -0.147779    -3.357376

我像这样使用fgets()

FILE *fs=fopen(argv[1],"r");
FILE *ft=fopen(argv[2],"w");
//few conditions here so that the file is read after the second line
char buf[256], colma[3], colmb[23], colmc[23], colmd[23];
if (fgets(buf, sizeof(buf), fs) == 0)
   break;
sscanf(buf, "%s %s %s %s", colma, colmb, colmc, colmd);
fprintf(ft, "%12s %10s %10s %15sn",colmb, colmc, colmd, colma);

期望输出为

    0.580533  -1.111576   1.827241               O
    0.791283  -0.030547   2.529271               N
    0.938920  -0.043192   3.722388               O
    0.387757   0.171327  -0.654089              Eu
   -2.454117   0.553935  -1.831953               N
   -3.555931   0.702353  -2.289337               O
    0.859520   1.403791   1.815420               O
    2.535343   1.144752  -2.164160               O
    2.927953  -0.016122  -2.615146               N
    3.864559  -0.147779  -3.357376               O
我得到的输出是
    0.580533  -1.111576   1.827241               O
    0.791283  -0.030547   2.529271               N
    0.938920  -0.043192   3.722388               O
    0.387757   0.171327  -0.654089               u
   -2.454117   0.553935  -1.831953               N
   -3.555931   0.702353  -2.289337               O
    0.859520   1.403791   1.815420               O
    2.535343   1.144752  -2.164160               O
    2.927953  -0.016122  -2.615146               N
    3.864559  -0.147779  -3.357376               O

通过在my源文件的第四行添加额外的空间来纠正此问题。编辑后的文件如下所示

 O     0.580533    -1.111576     1.827241
 N     0.791283    -0.030547     2.529271
 O     0.938920    -0.043192     3.722388
 Eu     0.387757     0.171327    -0.654089
 N    -2.454117     0.553935    -1.831953
 O    -3.555931     0.702353    -2.289337
 O     0.859520     1.403791     1.815420
 O     2.535343     1.144752    -2.164160
 N     2.927953    -0.016122    -2.615146
 O     3.864559    -0.147779    -3.357376

如果我在文件的每一行添加一个空格,它也可以工作sed -i -e 's/^/ /' <file>

谁能指出为什么我的程序不读取第一个字母? Edit1:循环是这样完成的,


int ch=0,count=0;
ch=fgetc(fs);
while(ch!=EOF)
    {
        if(ch=='n')
        {
            count++;
            printf("%dn",count);
        }
        if (count>1)
        {
            char buf[256], ele[256], xcoord[256], ycoord[256], zcoord[256];
            if (fgets(buf, sizeof(buf), fs) == 0)
                break;
            sscanf(buf, "%s %s %s %s", ele, xcoord, ycoord, zcoord);
            fprintf(ft, "%12s %10s %10s %15sn",xcoord, ycoord, zcoord, ele);
    }
    ch=fgetc(fs);

ch被初始化为int,因为它在初始化为char时没有编译

fgets读取一行失败时,它将退出循环。

int ch=0,count=0;
char buf[256], ele[256], xcoord[256], ycoord[256], zcoord[256];
while (fgets(buf, sizeof(buf), fs)) {
    if (4 == sscanf(buf, "%s %s %s %s", ele, xcoord, ycoord, zcoord)) {
        fprintf(ft, "%12s %10s %10s %15sn",xcoord, ycoord, zcoord, ele);
    }
    ++count;
}

关于:

ch=fgetc(fs);   

这是使用每行的第一个字符。

最新更新