char a[5];
while(cin >>a)
 cout <<a<<endl;
问题:我定义的a的宽度是5个字符,但是我输入的时候:
输入:123456789(回车)
输出:123456789
为什么我输入了9个字符,a是5个字符让然可以存储呢?

解决方案 »

  1.   

    我只想知道:
    char a[5];
    while(cin >>a)
     cout  < <a < <endl;
    a是如何容下9个甚至更对的字符的?
      

  2.   

    int b = 0;
    char a[5];
    while(cin >>a)
    {
     cout  <<a <<endl; 
     cout << b << endl;
    }
    输入时超过16个字符,看看输出b是多少
      

  3.   

    你把程序改一下进行调试,这个可能与cin和cout标准输入输出函数的缓冲机制有关。
      

  4.   

    a[5]只是一个内存区,cin 直到换行结束
    输入9个溢出了呗
      

  5.   

    nt b = 0;
    char a[5];
    cin.width(5);
    while(cin >>a)
    {
     cout   < <a  < <endl; 
     cout  < < b  < < endl;

    这样就正常了
    输入:123456
    输出:1234
          0
          56
          0
    cin的缓冲区在输出时,怎么和a到一起去了呢?
      

  6.   

    它是先将你输入的东西放在了标准输入流里边,然后从流里边去出内容放在你申请的内存中,因为你的cin始终返回true,所以它不会退出,继续从流里边把后面的字符读入输出了。
      

  7.   

    string a;
    cin.width(2);
    while(cin >>a)
    {
       cout<<a<<endl; 

    这个cin.width(2)的设置,只在第一次输入时起作用。
    如下:
    输入:123
    输出:1    这个是因为cin的width设置为2
          23   但是这个的width就是3
    输入:123  
    输出:123  这个就是4了
    也就是说cin.width(2)对于流的设置是不能保存状态的了?我是个新手,还请大家多多帮助
      

  8.   

    这个问题这样解释比较清楚一些:第一次输入1234567989 ,是将这些数输入到缓冲区中,然后你回车,结束这次输入,while循环有效,进入循环体,执行输出操作,所以输出的是123456789,但这时循环并没有结束,接着进行第二次循环,要求你第二次输入,和第一次一样,无论输出什么,都会显示出来,但如果你要退出循环的话,问题就出来了,出现一个错误,*****内存不能为written,所以,我想, 你之所以问这个问题,是因为你的循环还没有完,而你认为已经完了。