如上图,红线框起来的部分,为什么字符数组的输入放到里面出来的结果是不正确的,而按照下面的方法,放到循环的外面去输入运行结果是正确的?
正确放法图
下面放完整代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
char n[100] = { 0 };
int sum = 0;
cin>>n;
int i, number, mask = 1;
for (i = 0; n[i] != 0; i++) {
sum += (int)n[i] - 48;
}
int a = sum;
while (a>9){
a /= 10;
mask *= 10;
}
do{
number = sum / mask;
sum %= mask;
mask /= 10;
switch (number){
case 0:printf("ling"); break;
case 1:printf("yi"); break;
case 2:printf("er"); break;
case 3:printf("san"); break;
case 4:printf("si"); break;
case 5:printf("wu"); break;
case 6:printf("liu"); break;
case 7:printf("qi"); break;
case 8:printf("ba"); break;
case 9:printf("jiu"); break;
}
if (mask>0){
printf(" ");
}
} while (mask>0);
system("pause");
return 0;
}
这个题的题目
![图片描述][3]
我的错误的代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
char n[100] = { 0 };
int sum = 0, number, mask = 1;
for (int i = 0; i != 0; i++){
cin >> n[i];
sum = sum + (int)n[i] - 48;
}
int a = sum;
while (a > 9){
a = a / 10;
mask = mask * 10;
}
do{
number = sum / mask;
sum = sum % mask;
mask = mask / 10;
switch (number){
case 0:printf("ling");
break;
case 1:printf("yi");
break;
case 2:printf("er");
break;
case 3:printf("san");
break;
case 4:printf("si");
break;
case 5:printf("wu");
break;
case 6:printf("liu");
break;
case 7:printf("qi");
break;
case 8:printf("ba");
break;
case 9:printf("jiu");
break;
default:break;
if (mask > 0){
printf(" ");
}
}
} while (mask > 0);
system("pause");
return 0;
}
为什么字符数组的输入不放到循环里面呢?而且放到里面的运行结果是错误的。
PHP中文网2017-04-17 14:47:24
上で述べたように、これは無限ループです。
cin>>nして文字を入力するだけです。これが問題ですか?システムは入力中にメモリ内にバッファをオープンして入力ストリームと出力ストリームのデータを一時的に保存し、その後そのデータをバッファから取り出して、それを配列の最初のアドレスに割り当てるためですか?これは、配列 n[100] に代入することと同じです。あなたの質問については、C++ の入力ストリームと出力ストリームを見てください。
天蓬老师2017-04-17 14:47:24
実際、cin はループの内側にも外側にも配置できます。
言うまでもなく、すべてを完了しました。
ループは実際には論理エラーです。ループ内のコードは一度も実行されていません。
最初の行では、n[100] を「0」*100 に初期化しました。
n[i] は常に 0 に等しいため、後続のループ条件の結果は常に False になります。
プログラムは常にループを無視し、11 行目にジャンプして実行を継続します。
巴扎黑2017-04-17 14:47:24
これは IO 操作であるため、システム コールの速度が遅いため、通常は一度により多くのデータが読み取られ、キャッシュにバッファが使用されます。ここでの cin はライン バッファリングされ、一度に 1 行のデータが読み取られます。時間。ループを使用する場合は getchar 関数を使用する必要がありますが、これは非効率であるためお勧めできません。