簡體   English   中英

告訴 cin 在換行符處停止閱讀

[英]tell cin to stop reading at newline

假設我想從輸入中讀取整數 a 行,如下所示:

1 2 3 4 5\n

我希望 cin 停在 '\\n' 字符處,但 cin 似乎無法識別它。

下面是我用的。

vector<int> getclause() {
  char c;
  vector<int> cl;

  while ( cin >> c && c!='\n') {    
    cl.push_back(c);
    cin>>c;
  }
  return cl;
}

我應該如何修改它,以便 cin 在看到 '\\n' 字符時停止?

使用 getline 和 istringstream:

#include <sstream>
/*....*/
vector<int> getclause() {
  char c;
  vector<int> cl;
  std::string line;
  std::getline(cin, line);
  std::istringstream iss(line);
  while ( iss >> c) {    
    cl.push_back(c);
  }
  return cl;
}

您可以通過在istream上設置noskipws來讀取所有空格:

#include <ios>
#include <iostream>
#include <vector>

using std::vector;

vector<int> getc() {
    char c;
    vector<int> cl;
    std::cin >> std::noskipws;
    while (std::cin >> c && c != '\n') {
        cl.push_back(c);
        std::cin >> c;
    }
    return cl;
}

如果標准輸入只包含一行,您不妨使用istream_iterator構造向量:

#include <iostream>
#include <iterator>
#include <vector>

using std::vector;

vector<int> getc() {
    // Replace char with int if you want to parse numbers instead of character codes
    vector<int> cl{
        std::istream_iterator<char>(std::cin),
        std::istream_iterator<char>()
    };
    return cl;
}

您可以使用getline方法首先獲取該行,然后使用istringstream從該行獲取格式化的輸入。

使用 std::getline,這會解決問題

在這種情況下處理字符時getchar()cin更有效

我試圖對一行未知長度的字符做同樣的事情,並希望它停在換行符處,但它有一個無限循環並且沒有檢測到換行符,所以我只使用了getchar()而不是cin並且它有效

從這個鏈接,實現這一點非常簡單。

#include <stdio.h>
int main(void) {
    int i=0,size,arr[10000];
    char temp; 
    do{
        scanf("%d%c", &arr[i], &temp); 
        i++; 
        } while(temp!= '\n');

    size=i; 
    for(i=0;i<size;i++){ 
        printf("%d ",arr[i]); 
    } 
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM