2016-10-27 9 views
0

2行の入力を必要とするプログラムを作成する必要があります。それぞれの入力は不特定の数値で構成され、それぞれを別々のvector(int *)複数の行の複数行を読む(数字が指定されていない)C言語で

文字列を使用して入力を保存し、intに変換することはできません。

それは実際に私は次のコードでのWindowsのためにそれを解決してきた、Linuxの環境には、動作するように持っている:私はLinux上でそれをテストしてみた、少なくとも私にとっては、それはdoesnの

int t,s1=0,s2=0; 
char tx; 
int* a=(int*)malloc(0); 
int* b=(int*)malloc(0); 
scanf("%i%c",&t,&tx); 
while(tx!='\n') 
{ 
    a=(int*)realloc(a,sizeof(int)*(s1+1)); 
    a[s1++]=t; 
    scanf("%i%c",&t,&tx); 
} 
a=(int*)realloc(a,sizeof(int)*(s1+1)); 
a[s1++]=t; 
scanf("%i%c",&t,&tx); 
while(tx!='\n') 
{ 
    b=(int*)realloc(b,sizeof(int)*(s2+1)); 
    b[s2++]=t; 
    scanf("%i%c",&t,&tx); 
} 
b=(int*)realloc(b,sizeof(int)*(s2+1)); 
b[s2++]=t; 

仕事。

私は本当にあなたの助けに感謝します、ありがとう!

+0

Cでvoidポインタをキャストする必要はなく、どのような方法でも推奨されていません。それらの役に立たないキャストを取り除くだけです。 – alk

+1

"*動作しません。*"は多かれ少なかれ不具合報告書です。具体的にお聞かせください:あなたは何を期待していますか?何を手に入れますか? – alk

+0

"vector(int *)"これはC++の質問かもしれないと思います... –

答えて

3

私はあなたのプログラムをLinuxで試してみましたが、私にとってはうまくいきました。そこには、末尾にされている場合は、

(gdb) print s1 
$4 = 3 
(gdb) print s2 
$5 = 2 
(gdb) print a[0] 
$6 = 1 
(gdb) print a[1] 
$7 = 2 
(gdb) print a[2] 
$8 = 3 
(gdb) print b[0] 
$9 = 4 
(gdb) print b[1] 
$10 = 5 
(gdb) 

しかし、コードはおそらく失敗します。私はgdbの中でそれを実行し、最後の文の後に、デバッガは次の値を与えた

1 2 3 
4 5 

:私は、次の入力ファイルを使用しました入力データの空白。

また、scanf()の戻り値もチェックしないため、scanf()が失敗した場合など、無限ループになる可能性があります。初期のEOFに起因する。

Windowsの行末(\ r \ n)を使用してファイルからプログラム入力データを入力すると、問題が発生することもあります。

また、コードが重複しないように、do {} while (tx!='\n')ループを使用するようアドバイスします。

関連する問題