std :: cin适用于少量行,但不适用于较大行

时间:2015-05-28 23:48:41

标签: c++ list import filenames cin

我正在编写一个程序的一部分,该程序获取用户提供的文件名列表并将它们存储在矢量中。到目前为止,使用少量文件名进行测试(我已经完成了11次)工作正常并且程序仍在继续,但尝试导入70个或更多文件名会使程序无法继续。

这是我的代码:

//******************************* Get List of Filenames ********************************
cin.ignore(1000, '\n');
cout << "Please paste all of the Scans files here: ";
vector<string> filenameList;
string filenameString;

//can change the quit value to anything you want
while (cin >> filenameString && filenameString != "b") 
{
    filenameList.push_back(filenameString);
}

cout << "The filenames entered are:\n";
for (int i = 0; i < filenameList.size(); i++)
{
    cout << filenameList[i] << endl;
}
cout << endl << filenameList.size();

错误是程序挂起并且看起来仍在等待输入,但是即使在输入退出代码&#34; b&#34;之后也没有做任何其他事情。

我们正在将文件名直接复制并粘贴到控制台中,然后使用cin将它们放入向量中。

以下是我们正在使用的文件名列表的示例:

MSS279_S10_B112_F8_p001.jpg
MSS279_S10_B112_F8_p002.jpg
MSS279_S10_B112_F8_p003.jpg
MSS279_S10_B112_F8_p004.jpg
MSS279_S10_B112_F8_p005.jpg
MSS279_S10_B112_F8_p006.jpg
MSS279_S10_B112_F8_p007.jpg
MSS279_S10_B112_F8_p008.jpg
MSS279_S10_B112_F8_p009.jpg
MSS279_S10_B112_F8_p010.jpg
MSS279_S10_B112_F8_p011.jpg
MSS279_S10_B112_F8_p012.jpg
MSS279_S10_B112_F8_p013.jpg
MSS279_S10_B112_F8_p014.jpg
MSS279_S10_B112_F8_p015.jpg
MSS279_S10_B112_F8_p016.jpg
MSS279_S10_B112_F8_p017.jpg
MSS279_S10_B112_F8_p018.jpg
MSS279_S10_B112_F8_p019.jpg
MSS279_S10_B112_F8_p020.jpg
MSS279_S10_B112_F8_p021.jpg
MSS279_S10_B112_F8_p022.jpg
MSS279_S10_B112_F8_p023.jpg
MSS279_S10_B112_F8_p024.jpg
MSS279_S10_B112_F8_p025.jpg
MSS279_S10_B112_F8_p026.jpg
MSS279_S10_B112_F8_p027.jpg
MSS279_S10_B112_F8_p028.jpg
MSS279_S10_B112_F8_p029.jpg
MSS279_S10_B112_F8_p030.jpg
MSS279_S10_B112_F8_p031.jpg
MSS279_S10_B112_F8_p032.jpg
MSS279_S10_B112_F8_p033.jpg
MSS279_S10_B112_F8_p034.jpg
MSS279_S10_B112_F8_p035.jpg
MSS279_S10_B112_F8_p036.jpg
MSS279_S10_B112_F8_p037.jpg
MSS279_S10_B112_F8_p038.jpg
MSS279_S10_B112_F8_p039.jpg
MSS279_S10_B112_F8_p040.jpg
MSS279_S10_B112_F8_p041.jpg
MSS279_S10_B112_F8_p042.jpg
MSS279_S10_B112_F8_p043.jpg
MSS279_S10_B112_F8_p044.jpg
MSS279_S10_B112_F8_p045.jpg
MSS279_S10_B112_F8_p046.jpg
MSS279_S10_B112_F8_p047.jpg
MSS279_S10_B112_F8_p048.jpg
MSS279_S10_B112_F8_p049.jpg
MSS279_S10_B112_F8_p050.jpg
MSS279_S10_B112_F8_p051.jpg
MSS279_S10_B112_F8_p052.jpg
MSS279_S10_B112_F8_p053.jpg
MSS279_S10_B112_F8_p054.jpg
MSS279_S10_B112_F8_p055.jpg
MSS279_S10_B112_F8_p056.jpg
MSS279_S10_B112_F8_p057.jpg
MSS279_S10_B112_F8_p058.jpg
MSS279_S10_B112_F8_p059.jpg
MSS279_S10_B112_F8_p060.jpg
MSS279_S10_B112_F8_p061.jpg
MSS279_S10_B112_F8_p062.jpg
MSS279_S10_B112_F8_p063.jpg
MSS279_S10_B112_F8_p064.jpg
MSS279_S10_B112_F8_p065.jpg
MSS279_S10_B112_F8_p066.jpg
MSS279_S10_B112_F8_p067.jpg
MSS279_S10_B112_F8_p068.jpg
MSS279_S10_B112_F8_p069.jpg
MSS279_S10_B112_F8_p070.jpg
MSS279_S10_B112_F8_p071.jpg
MSS279_S10_B112_F8_p072.jpg
MSS279_S10_B112_F8_p073.jpg
MSS279_S10_B112_F8_p074.jpg
MSS279_S10_B112_F8_p075.jpg
MSS279_S10_B112_F8_p076.jpg

2 个答案:

答案 0 :(得分:0)

尝试将cin >> filenameString && filenameString != "b"分成两行代码。也许把第二部分放在循环中,在这样的if语句中:if (filenameString != "b") break;我怀疑分配给filenameString然后在同一行中进行比较可能并不总是表现为你认为应该。

答案 1 :(得分:0)

我从来没有想过为什么,但我认为Xcode因某种原因(大约1000个字符)可以导入的字符数有限制。

我在PC上切换到Visual Studio,一切都很完美......