簡體   English   中英

For循環使用getline在vector中輸入字符串

[英]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] ,據我所知,它甚至不應編譯。 getlinestd::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.

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