关于不定长数组的输入问题

首先这种while(cin>>a) 或者while(scanf(“%d”,&a)!=EOF)这种是针对多个无限样例输入而进行的,EOF表示除非认为输入ctrl+z会终止循环的读入,否则读入一个a之后键入enter之后执行while循环体,然后再次返回scanf函数等待输入,除非人为的这次键入改为ctrl+z不在是整型a了,终止输入样例。


由于cin>>a>>x;这种cin会对空格和换行进行忽略,仅作为分隔的识别符,但不会读取该分隔符的值,因此需要用一个能读取换行空格的函数来判断是否在cin>>x之后随之键入的字符是否为换行还是空格,如果空格则继续读键入整数值,如果是enter则跳出输入循环。cin类中的get()函数就是这个功能。

    vector <int>   q;

    while(cin>>a)

    { 

         x=cin.get();

        if(x=='\n')

            break;

        q.push_back(a);

  }

同理也可以用scanf(“%d%c”,&a[i],&c);

  1. #include<stdio.h>  
  2. #define MAX 100  //定义最大长度  
  3. int main()  
  4. {  
  5. int a[MAX];  
  6. char c;  
  7. int i;  
  8. for(i=0;i<MAX;i++)  
  9.     {  
  10.     scanf("%d%c",&a[i],&c); //每次扫描输入以数字和char类型输入为准  
  11.     if(c=='\n'//如果接受到回车,则break  
  12.     break;  
  13.     }  
  14. //这样我们就得到了一个长度为i的数组a[]  
  15. }  

方法二

    运用isstringstream进行判断

 首先读入一行字符串,也即将键入的以空格为分隔符的一行字符串数字存入一个string对象中,然后用isstringstream进行分割,分割的整数存在变量str中,然后循环str>>a,依次输出。

       //从string对象中读取字符   也即将string对象
        //nums以空格为分隔符分割出字符,然后以enter结尾,然后将分割的整数在istr中
        //以>>可以存储在变量中 进行输出

for (int i = 0; i < 3; i++) 

{

        getline(cin, nums); //整行读入字符串,以string为读入对象,可以包括空格,getline仅以enter为结尾符。
        istringstream istr(nums);
        while (istr >> num)
        {
            num++;
            cout << num << " ";
        }
        cout << endl;
    }


  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值