C++中字符数组的输入

浏览:37日期:2023-04-12

问题描述

C++中字符数组的输入

如上图,红线框起来的部分,为什么字符数组的输入放到里面出来的结果是不正确的,而按照下面的方法,放到循环的外面去输入运行结果是正确的?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;}

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

问题解答

回答1:

正如楼上的,这是无限循环啊!C++中字符数组的输入

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

回答2:

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

回答3:

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

回答4:

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

相关文章: