私のプログラムは.DATファイルから数値を表示するために使用されます。各行には2つのフィールドがあります。たとえば :.datファイルの 内容:fgetsを使用してCの空行をスキップ
1 2.2
3 10.9
10 100
.DATファイル内の4行があります。最初の行では、field1は「1」で、field2は「2.2」です。 3行目は空白行です。
私のプログラムは、私たちはある.DATファイルで見るのと同じ形式で数値を表示するために使用されます。
1 2.2
3 10.9
10 100
私はUbuntuの中のすべての私のプログラミングを行います。 gccでプログラムをコンパイルして実行する。
私のコードを以下に示します。
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = fopen("number.dat", "r");
if (fp == NULL)
{
fprintf(stderr, "ERROR: cannot open the file\n");
return 1;
}
char *field1 = NULL;
char *field2 = NULL;
char line[100];
while(fgets(line, 100, fp)!=NULL)
{
if(line[0] != '\n')
{
field1 = strtok(line, " ");
field2 = strtok(NULL, " ");
printf("%s ", field1);
printf("%s", field2);
}
else
{
printf("Blank Line!");
}
}
fclose(fp);
return 0;
}
しかし、私はプログラムを実行した後、その結果を以下に示します。
1 2.2
3 10.9
(null)10 100
私は理由を理解していない「(ヌル)」に示されています"空白行!"の代わりに。誰かが問題の原因を見つけるのを助けることができますか?
空白行に空白文字(タブなど)が含まれている可能性があります。 'fgets()'がそれらを取り出します。しかし、あなたの 'strtok()'の呼び出しは、スペース文字以外の空白文字を拾わないでしょう。 – Peter
@alk私は "rt"を試しました。しかし、それはまだ動作しません。 –
@Gareth lam - あなたのプログラムはGCCで正常に動作した後、修正を行いました。 –