C++问题 困扰多日

来源:百度知道 编辑:UC知道 时间:2024/05/07 06:58:23
问题一。
#include<iostream.h>
int main()
{
char a[5];
cin>>a;
cout<<a;
return 0;
}
定义的是a[5]但是为什么最多可以输出一个有8个字符的字符串?
问题二。
#include<iostream.h>
int main()
{
char a[10];
cin.getline(a,12);
cout<<a;
return 0;
}
我定义的明明是a[10]可是为什么我就算输入字符串有11个字符都能照样输出呢?而且cin.getline(a,12);对于这句也没报错。难道char a[10]里的10是假的?
问题三。
#include<iostream.h>
#include<conio.h>
int main()
{
int a;char c;
do
{
cout<<"输入a:";
cin>>a;
cout<<a<<'\n';
cout<<"是否继续(Y/N)";
}while((c=getch())=='Y'||c=='y');
return 0;
}
为什么这段代码在输入了a的值以后什么也不输出直接跳到while那里去了?也就是我要输入一个Y它才返回去执行
cout<<a<<'\n';
cout<<"是否继续(Y/N)";这2句,当然输入其它字符也会执行这2句 只不过执行完跳出 输入Y的话是执行完以后重新执行输入a的操作 但是输入完以后又跳到while了 这是为什么阿?<

第三题的如Bwxwle所改,
前二个题属于分配空间的问题,
其实,char a[5]在应用的时候下角标只有0,1,2,3,4;但是,如果你写出
a[5]甚至a[10]并不会报错,因为[]变址运算符,表示的偏移量,a相当于数组的首址.这样,就是正常的往下走空间了,只是,因为你定义的时候只定义了五个空间,这样的话,如果其它的空间有内容,就会把别的数据盖住了,很危险的.而,你输出的时候,都是顺序的往下走,直到遇'\0'才结束,所以,自然会全输出了,如果你定义char a[5],最好,只往里面存四个字符,
因为最后一个是'\0'否则就有可能盖住其它有用的数据.

个人意见:
前两个问题我认为是分配空间的问题,若定义为a[n],n为1、2、3、4则最多可输入4个字符,5、6、7、8则可输入最多8个字符,应该是以4个字节为单位分配的,具体的不了解,自己理解仅供参考
第三个问题:
原程序do--while语句运行一遍需要输入一个整型数据和一个字符数据,所以会出现以上情况,程序改为:
#include<iostream.h>
int main()
{
int a;
char c;
do
{
cout<<"输入a:";
cin>>a;
cout<<a<<'\n';
cout<<"是否继续(Y/N):";
cin>>c;
}while(c=='y'||c=='Y');
return 0;
}

第三个问题:
cout<<"是否继续(Y/N)"; 在后面加上<<endl;就ok了

1.字符数组,遇到'\0'才会终止输出。
2.同上
3.程序正确(应该加上using namespace std;