stdinからの入力を処理しようとしていますが、壁にぶち当たっています。 私の目標は数字の数字(0〜99)を読んで、それぞれを単語で印刷することです。 私の最初の試みでした:整数の不明な数を読み取り、それらを単語で印刷する
int main(void) {
char *a[20] = {"zero","one","two","three","four","five","six","seven","eight",
"nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen",
"seventeen","eighteen","nineteen"};
char *b[8] = {"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"};
int num=0, tens=0, ones=0;
while (scanf("%d", &num)==1){
tens = num/10;
ones = num%10;
if (tens>1){
printf("%s ", b[tens-2]);
printf("%s \n", a[ones]);
}
else
printf("%s \n", a[num]);
}
printf("done");
return 0;
}
出力は正しいですが、scanf関数は、ループを終了することはありません。
第二の試み:ここ
int main(void) {
char *a[20] = {"zero","one","two","three","four","five","six","seven","eight",
"nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen",
"seventeen","eighteen","nineteen"};
char *b[8] = {"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"};
char line[1024], *ptr = NULL;
long num;
int tens=0, ones=0;
if(fgets(line, sizeof(line), stdin)!=NULL){
do {
num = strtol(line, &ptr, 10);
tens = num/10;
ones = num%10;
if (tens>1){
printf("%s ", b[tens-2]);
printf("%s \n", a[ones]);
}
else
printf("%s \n", a[num]);
}while (*ptr!= '\n');
}
printf("done");
return 0;
}
私はコンパイルエラーを取得し、それが動作するかどうか私にはわからないので、問題を見つけることができません。
[UPDATE]:2番目のコードは実行されますが、 12 35 51のように1つ以上の数字を入力すると無限に最初の数字(12文字)が印刷されます。
ご協力いただければ幸いです。
コンパイルエラーは何ですか? –
idが1の終了ステータスを返しました。 –
何ですか?コンパイルエラーではありません。 –