C++中字符数组的输入

图片描述

如上图,红线框起来的部分,为什么字符数组的输入放到里面出来的结果是不正确的,而按照下面的方法,放到循环的外面去输入运行结果是正确的?
图片描述

正确放法图
下面放完整代码:

#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;

}

为什么字符数组的输入不放到循环里面呢?而且放到里面的运行结果是错误的。

回答:

正如楼上的,这是无限循环啊!
图片描述

直接cin>>n,就把字符输入了。是这个问题吗?是因为在输入时系统在内存中开辟了一段缓冲区,来暂存输入输出流的数据,然后再把缓冲区的数据取出来赋值给n,n是数组的首地址么所以就相当于赋值给了数组n[100];你这问题去看C++的输入输出流。

回答:

事实上,cin放循环内外都可以的。
循环外的不用说了,你都搞定了。
循环内其实是个逻辑错误,循环内的代码从来没有执行过。
第一行你已经初始化n[100] 成'0'*100,
所以之后循环的条件的结果永远是False,因为n[i]永远等于0。
程序会永远忽略循环跳到第11行继续执行。

回答:

因为这是io操作,系统调用速度慢,所以一般会一次性读较多数据再用buffer用来缓存,这里的cin应该是line buffered,一次性读取一行数据。如果你想要用循环的方式,需要用getchar函数,但这样效率低,不是推荐的方式。

回答:

for (int i = 0; i != 0; i++){是什么鬼

以上是 C++中字符数组的输入 的全部内容, 来源链接: utcz.com/p/192708.html

回到顶部