2012-03-06 14 views
0

Cで配列に整数を追加しようとしていますが、ファイルから文字を読み込んでいるので、まず整数に変換しなければなりません。 何らかの理由で私のプログラムが動作しなくなる前に起動することさえありません。私はそれが変換の問題だと思うが、私は Cで整数として配列に文字を追加する

新しい編集コードC.

に新しいです:

#include <stdio.h> 
#include <stdlib.h> 

int main (void) 
{ 
    FILE* fp; 
    const char filename[] = "test.txt"; 
    char ch; 
    int num[1000]; 
    int j = 0; 
    char temp; 

    fp = fopen(filename, "r"); 
    if(fp == NULL) 
    { 
     printf("Cannot open file: %s\n", filename); 
     exit(8); 
    } 

    while(!feof(fp)) 
    { 
     temp = fgetc(fp); 
     num[j] = temp - '0'; 
     j++; 
    } 
    printf("First in the array is: %d, last is; %d", num[0], num[999]); 


    fclose(fp); 

    return EXIT_SUCCESS; 
} 

test.txtという正しい方向に私を指すように

731671765313306249192251196744265747423553491949349698352031277450632623957831801698480186947885184385861560789112949495459501737958331952853208805511 
125406987471585238630507156932909632952274430435576689664895044524452316173185640309871112172238311362229893423380308135336276614282806444486645238749 
303589072962904915604407723907138105158593079608667017242712188399879790879227492190169972088809377665727333001053367881220235421809751254540594752243 
525849077116705560136048395864467063244157221553975369781797784617406495514929086256932197846862248283972241375657056057490261407972968652414535100474 
821663704844031998900088952434506585412275886668811642717147992444292823086346567481391912316282458617866458359124566529476545682848912883142607690042 
242190226710556263211111093705442175069416589604080719840385096245544436298123098787992724428490918884580156166097919133875499200524063689912560717606 
0588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 

誰かが素晴らしいことです。

+1

すべての数字は1桁の数字ですか?ループ内では、文字のみを整数に変換しています。 –

+0

'test.txt'の内容を追加した後、私は新しい回答を投稿しました。それが動作するかどうか参照してください! –

答えて

1

を助け、あなたがtest.txtの内容を追加した後、あなたがインデックスに要素

希望を一時カウンタを使用する代わりにwhile (fscanf(fp, "%d", &num[count]) !=EOF){の私は私の全体の答えを言い換えています。

代わりの

while(!feof(fp)) 
{ 
    temp = fgetc(fp); 
    num[j] = temp - '0'; 
    j++; 
} 

while(!feof(fp)&& (j<1000)) 
{ 
    temp = fgetc(fp); 
    if (temp != EOF && (temp>='0' && temp<='9')) // To filter out non-numbers and also the last EOF 
     num[j++] = temp - '0'; 

} 

、代わりに

printf("First in the array is: %d, last is; %d", num[0], num[j-1]); // j-1 so that it works even when there are less than 1000 numbers and to keep it generic 

printf("First in the array is: %d, last is; %d", num[0], num[999]); 

変更のへの変更

あなたの完了!

+0

thanks Paven !.完璧に働いた! – SD1990

1

あなたは動的にそう

int num[count] 

が動作しません、このようにCのint配列を割り当てることができません。 mallocを使用して最大値または動的割り当てを使用します。

はまた、あなたは、あなたが2番目の要素は0であることと、2要素のchar配列を渡す必要があり、単一charがATOIに渡すことができない、またはあなただけにEOFのため

num[j] = temp - '0'; 

もチェックFPを使用することができますループが間違っている間にfeof(fp)またはtemp != EOF

これはうまくいくために役立ちます。

+0

新しい編集であなたの変更を加えても、プログラムはまだ実行されません。 – SD1990

+2

実際には、以前と同じように変数を使用して配列を初期化することができます:array [arraySize]。それが境界から逸脱した場合には、たとえばループなどで "サイズ変更"することは許されません。新しい大きな配列を作成し、そこに値をコピーする必要があります。 –

0

次のアプリケーションが動作して(1 3 5 5565を含むテキストファイルで)以下の出力enter image description here

int main (void) 
{ 
    FILE* fp; 
    const char filename[10] = "test.txt"; 
    char ch; 
    int count = 0; 
    int num[100]; 


    fp = fopen(filename, "r"); 
    if(fp == NULL) 
    { 
     printf("Cannot open file: %s\n", filename); 
     exit(8); 
     } 

    while (fscanf(fp, "%d", &num[count]) !=EOF){ 
      count++; 
     } 

    rewind(fp); 

    printf("Text file contains: %d\n", count); 
    printf("First in the array is: %d, last is; %d\n", num[0], num[count-1]); 


    fclose(fp); 
    system("pause"); 
    return EXIT_SUCCESS; 
} 

を与えるあなたは、配列はdynamiclyサイズになりたい場合は、あなたがループに必要な要素、カウントスルーそれらを追加する前に、あなたのメインコードの例と同じように、これは

+1

これはうまくいかなかった...マイナスの大きな数字がある – SD1990

+0

あなたのテキストファイルがどのように見えるかに依存しているとします。 EOFは行の終りを意味します。つまり、入力またはスペースです。そのため、各要素はそれを使用して区切られている必要があります。 –

+0

テキストファイルの内容を投稿してください。上記のコードは私のcomp上でうまく動作するので、あなたもあなたの上で動作するはずです:) –

関連する問題