2

程序必须读取整数列表并按原样打印它们

前任:

1 2 3 4
1 2 3 4
3 1 2 4
3 1 2 4

while(cin.get()!=-1){
                i=0;                
                while(1) {
                        if(cin.get()=='\n') {
                                break;
                        }
                        else {
                                cin >> a[i];
                                i++;
                        }
                }
                for(k=0;k<i;k++) {
                        cout << a[k]<< " ";
                                }
                }

但它没有给出第一个整数,原始输出如下

前任:

 1 2 3 4
 2 3 4
 3 1 2 4
 1 2 4

如何改进此代码以读取和打印第一个整数。

提前致谢 :)

4

3 回答 3

2

cin.get()从标准输入中读取一个字符并返回它。您不将返回值分配给cin.get()变量。因此,刚刚读取的值丢失。

于 2013-11-01T09:20:09.683 回答
1

您可以阅读整行然后解析它。其中一种变体(对您的代码进行了最少的修改)如下:

#include <iostream>
#include <sstream>

using namespace std;

int main(int argc, char *argv[]) {
  int i, k;
  char a[1024] = {0};
  string str;
  while(cin.good()){
    i=0;   
    getline(cin, str);
    stringstream ss(str);
    while (ss >> a[i]) { if (++i > 1024) break; }
    for(k=0;k<i;k++) {
      cout << a[k] << " ";
    }
    cout << endl;
  }
}

输出:

g++ -o main main.cpp ; echo -ne " 1 2 3 4\n5 6 7 8\n"|./main
1 2 3 4 
5 6 7 8
于 2013-11-01T10:23:23.317 回答
1

除了忽略 get() 的结果之外,如果输入包含无效字符(如果 cin >> a[i] 失败),您的代码将以无限循环结束。

#include <cctype>
#include <iostream>
#include <sstream>

int main()
{
    std::cout << "Numbers: ";
    {
        std::string line;
        if(std::getline(std::cin, line)) {
            std::istringstream s(line);
            int number;
            while(s >> number) {
                std::cout << number << ' ';
            };
            // Consume trailing whitespaces:
            s >> std::ws;
            if( ! s.eof()) { std::cerr << "Invalid Input"; }
            std::cout << std::endl;
        }
    }
    std::cout << "Digits: ";
    {
        std::istream::int_type ch;;
        while((ch = std::cin.get()) != std::istream::traits_type::eof()) {
            if(isdigit(ch)) std::cout << std::istream::char_type(ch) << ' ';
            else if(isspace(ch)) {
                if(ch == '\n')
                    break;
            }
            else {
                std::cerr << "Invalid Input";
                break;
            }
        };
        std::cout << std::endl;
    }
    return 0;
}
于 2013-11-01T10:04:33.667 回答