回 帖 发 新 帖 刷新版面

主题:关于格式非法输入,c++的处理方式,求解惑

#include<iostream>
using namespace std;
void main()
{
    int a[10];
    cin>>a[10];
    cout<<a[10]<<endl;
}//不管我输入什么英文字符,输出来都是同样的数字串1245120,在这里,1245120有意义么?对于格式之间的非法输入,c++是怎么处理的?

回复列表 (共7个回复)

沙发

你这里的主要问题是数组a[10] 访问越界了,定义int a[10];其最大下标应该是9。
cin>>a[10];将导致访问越界,甚至会触发异常。
楼主如果想依次输入输出a[10]中10个元素的内容可以这样:
for(int i = 0;i < 10;i++)
{
   cin>>a[i];
}
for(int i = 0;i < 10;i++)
{
   cout<<a[i]<<endl;
}

另外,a[10]是整型数组,所以输入英文的话会被强制转换为整型,将不会输出字符。

板凳

如果楼主想输出字符的话可以这样:
char a[10];
for(int i = 0;i < 10;i++)
{
   cin>>a[i];
}
cout<<"  "<<endl;
for(int i = 0;i < 10;i++)
{
   cout<<a[i]<<endl;
}

或者这样:
char a[10];
for(int i = 0;i < 10;i++)
{
   cin>>a[i];
}
cout<<"  "<<endl;
a[9] = '\0';//字符串结束符
cout<<a<<endl;

3 楼

额,正常处理我会的,谢谢各位,我问的是:用字母输入,然后cout数组,出来是一串数字,并且这串数字是不变的,这是怎么回事

4 楼

1245120是那个内存单元里面的值。lz可以试下a[11]值就会变了

5 楼

楼上说得很对,就是这么回事。

6 楼

楼主这里最主要的问题还是访问越界了,a[10]的值其实是不确定的,之所以出现楼主所说的情况,大概是恰好在执行该程序时a[10]所对应内容未被改变,应该说是一种巧合。楼主可以试试在不同的电脑或者通过不同的编译器编译,结果可能都会变化。比如在我电脑上就会报异常。

7 楼

非常感謝各位!

我来回复

您尚未登录,请登录后再回复。点此登录或注册