![](/img/trans.png)
[英]using getline() and then extracting strings from user input (using C++)
[英]For loop to input strings in vector using getline
所以我有一個學校的作業,我需要聲明一個字符串向量,然后使用for循環使用get行將名稱輸入向量中。 到目前為止,這段代碼是我想要的,我試圖為向量中的位置創建一個變量,然后根據變量的值在向量中輸入一個字符串。 我正在使用C ++。
我想知道的是:我的邏輯缺陷是什么?
#include "stdafx.h"
#include <iostream>;
#include <vector>;
#include <string>;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<string> name_list(10);
int n;
for (name_list[n]; cin.getline >> name_list[n]; ++n)
cin >> name_list[n];
cout << name_list[n];
int stop; cin >> stop;
return 0;
}
編輯:::所以我想通了! 謝謝0x499602D2,您為我設定了正確的方法。 我想出的代碼是這樣的:
int _tmain(int argc, _TCHAR* argv[])
{
vector<string> name_list(11);
int n = 0;
for (int n = 0; n < 11; ++n);
getline(cin, name_list[n]);
cout << name_list[n];
int stop; cin >> stop;
return 0;
}
n
不僅是未初始化的,而且您還在做cin.getline >> name_list[n]
,據我所知,它甚至不應編譯。 getline
是std::cin
的成員函數,該函數從輸入中讀取一行到字符數組。 由於我們正在嘗試讀入向量,因此此處不需要它。
此外,由於您希望從用戶輸入中獲取名稱,該名稱位於向量的每個插槽中,因此嘗試使用getline
檢索行也沒有任何意義。
n
需要初始化為一個整數,當使用name_list[n]
訪問時,該整數將為我們提供矢量的開頭(將為0
),並且代替getline
,我們使用運算符>>
來獲取每個空格分隔的輸入。 像這樣:
for (int n = 0; std::cin >> name_list[n]; ++n)
; // empty
for循環體內不需要語句,因為它已經在循環參數中完成了。
您需要注意的另一件事是超出向量的大小。 您初始化了大小為10
name_list
,並且如果用戶輸入了11
名稱,則使用name_list[n]
訪問索引將導致程序中的未定義行為 ,這是一種特殊的說法,表示程序將無效。
最好使用at()
成員函數,因為如果您嘗試訪問越界地址,它將引發異常 :
for (int n = 0; std::cin >> name_list.at(n); ++n)
// ^^^^^^
;
您需要初始化n = 0,在第二個for參數中,您可能想將cin移入循環並用i <10替換它,因為否則循環將不知道何時停止
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.