-1

私はfile.txtいくつかのint変数を含んでいます。数値の 3 番目のグループを int に変換する必要があるため、必要なarray方法でデータを操作できます。

EX: file.txt
============

111111 1001 20120131 30
122222 2002 20110230 25
133333 3003 20100325 12
144444 1001 20110526 18
155555 1001 20100524 25
166666 2002 20120312 30
177777 2003 20120428 28
188888 3003 20111214 15
199999 3002 20101113 27
199999 1001 20101202 29
133333 1001 20120715 25
155555 1001 20100204 24
177777 3003 20110102 30    

ファイルを 1 行ずつ読み取る必要があり、次のfscanf関数を選択しました。

FILE *fp;

int n1, n2, n4;
char n3[9];
int array[9]

[...]

while (fscanf (fp, "%d %d %s %d", &n1, &n2, n3, &n4);

文字列を取得したので、それを int 配列に変換するにはどうすればよいですか? 私は試しました:

for (i = 0; i < strlen(n3); i++)
    array[i] = atoi(strlen[i])

しかし、それはうまくいきません...どうすればこれを解決できますか?

それは私に戻ります:

warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [enabled by default]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type ‘char’
4

4 に答える 4

2

次のようなものが必要です:

int array[HUGE];

for (int i = 0; i < HUGE && fscanf(fp, "%d %d %s %d", &n1, &n2, n3, &n4) == 4; ++i)
{
    array[i] = atoi(n3);
}

基本的な問題は、ファイルの行数がわからない場合、受信者配列の大きさがわからないことです。mallocより安全な解決策は、とで動的配列を使用することreallocです。

その点で、文字列を a に読み込むことも非常に危険です。ファイルに間違ったデータが含まれていると、プログラムが停止するか、さらに悪いことになりますchar[9]。最初に を使用してファイルを 1行ずつ文字列に読み取り、次に.fgetsstrtoul

于 2012-06-24T16:13:36.673 に答える
1

本当に 3 番目の要素を整数として取りたいだけなら、fscanf の呼び出し中に最初から整数として読み込んでみませんか? つまり、次のようにすれば、大まかにあなたが望むことができると思います:

#define MAX_VALUES 9

FILE *fp;

int n1, n2, n3, n4;
int array[MAX_VALUES]
int num_values;

while (fscanf (fp, "%d %d %d %d", &n1, &n2, &n3, &n4) && (num_values<MAX_VALUES))
    array[num_values++] = n3;
于 2012-06-24T16:17:45.180 に答える
1

少なくとも私があなたの質問を理解しているように、あなたは 3 番目の列の数字だけを本当に気にかけています。その場合は、次のようにするとよいと思います。

for (i=0; i<elements(array); i++)
    if (0 == fscanf(infile, "%*d %*d %d %*d", array+i))
        break;
于 2012-06-24T16:15:31.883 に答える
0

各行に8桁の配列が必要な場合は、次のようにすることができます。

for ( i = 0; i < 8; i++ ) {
    array[i] = n3[i] - '0';
}

ただし、他の人が言っているように、strlen()を8に置き換えたときにまったく同じことをしたとしても、n3[]とarray[]の長さのファイルの形式に依存するのは良い考えではありません。

おそらく、区切り文字としてスペースを使用して各行をstrtok()し、データに対して検証を行って、それがあなたの考えどおりであることを確認します。

PS 3番目の列は日付のように見えますが、intの配列が必要ですか?

于 2012-06-24T18:42:29.207 に答える