读取整数并在按新行时打印,直到C++文件末尾



程序必须读取整数列表并按回车键打印它们直到endoffile(或ctrl + C)

前任:

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

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

提前致谢:)

cin.get()

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

除了忽略 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;
}

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

#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 4n5 6 7 8n"|./main
1 2 3 4 
5 6 7 8

最新更新