我目前正在编写“C ++ Primer Plus”一书并完成一些编程练习。 看起来,我遇到了Xcode(4.3.3)的问题,因为下面的代码无法正常工作:
#include <iostream>
#include <string>
struct car
{
std::string maker;
int year;
};
int main()
{
using namespace std;
cout << "How many cars do you wish to catalog? ";
int nCars;
(cin >> nCars).get();
car* aCars = new car[nCars];
for (int i = 0; i < nCars; i++)
{
cout << "\nCar #" << (i + 1) << endl;
cout << "Please enter the make: ";
getline (cin, (aCars + i)->maker);
cout << "\nPlease enter the year made: ";
(cin >> (aCars + i)->year).get();
}
cout << "Here is your collection: \n";
for (int i = 0; i < nCars; i++)
{
cout << (aCars + i)->year << " " << (aCars + i)->maker << endl;
}
delete [] aCars;
return 0;
}
问题是,我没有机会进入任何制造商。该程序直接进入我必须输入年份的点,即使我正在使用“(cin&gt;&gt; nCars).get();”摆脱换行符。
我忽略了什么吗?
提前致谢!
答案 0 :(得分:0)
我怀疑你可能在Windows上运行,并且双字节换行符正在打击你。您可以使用ignore来改进事物(对于行不长的行):
cin >> nCars;
cin.ignore(1024, '\n');
请注意,由于您依赖于流数字处理,因此输入非数字年份(例如QQ
)将导致编程完成而无需再请求输入。
您不需要对这些年份进行数学运算,因此将它们视为字符串而不是整数。然后,如果您需要,您可以在获得输入后对每年进行验证。
答案 1 :(得分:0)
好的,伙计们......我发现了问题。 使用cin.get()时,Xcode中的控制台无法正常工作。 我在终端以及Visual Studio(Win 7)中尝试了相同的代码,程序运行良好。
无论如何,谢谢大家的建议。我会在下次尝试考虑它们。 :)
干杯!