cin.getline 在 while 循环中
cin.getline in while loop
我正在做学校作业,基本上你输入"VIP"
,vip++
就应该完成了。当我将 cin.getline
放入 while 循环时,它甚至不会构建。 getline
通常在其他代码中有效,但我这次不明白。有人能帮我吗?
代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <cmath>
int main() {
int istok = 0, zapad = 0, loza = 0, vip = 0, mladi = 0;
cout << "Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za "
"djecu i mlade."
<< endl;
char unos5;
while (unos5 != 'K') {
cin.getline(unos5, 5);
if (unos5 == 'I') {
istok++;
}
else if (unos5 == 'Z') {
zapad++;
}
else if (unos5 == 'L') {
loza++;
}
else if (unos5 == 'VIP') {
vip++;
}
else if (unos5 == 'M') {
mladi++;
}
/*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
cin>>unos5;
}*/
else if (unos5 == 'K') {
break;
}
}
cout << "Ukupna zarada od prodanih ulaznica je "
<< istok * 60 + zapad * 80 + loza * 100 + vip * 500 + mladi * 20
<< " kn." << endl;
return 0;
}
首先,cout
、cin
和 endl
都在 std
命名空间中,因此您需要将 std::
添加到它们前面#include
之后的 using std::cout;
行。
关于你的代码,istream
的getline
成员(cin
的类型)需要一个char数组,但你只定义了一个char。我建议不要使用 char 数组,而是使用自由函数 getline
获取要读取的流作为参数,并将结果存储在 std::string
中,这样可以更安全、更轻松地处理。因为你没有使用 <cstring>
而 getline
在 <string>
中,所以我更改了 #include
.
你的'VIP'也不能做一些有用的事情。这是三个字符合而为一,那是行不通的。您需要一个字符串(双引号,而不是单引号)。
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <string>
#include <cmath>
using std::cout;
using std::endl;
int main()
{
int istok = 0, zapad = 0, loza = 0, vip = 0, mladi = 0;
cout << "Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za djecu i mlade." << endl;
std::string unos5;
while (unos5 != "K") {
std::getline(std::cin, unos5);
if (unos5 == "I") {
istok++;
}
else if (unos5 == "Z") {
zapad++;
}
else if (unos5 == "L") {
loza++;
}
else if (unos5 == "VIP") {
vip++;
}
else if (unos5 == "M") {
mladi++;
}
/*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
cin>>unos5;
}*/
else if (unos5 == "K") {
break;
}
}
cout << "Ukupna zarada od prodanih ulaznica je " << istok * 60 + zapad * 80 + loza * 100 + vip * 500 + mladi * 20 << " kn." << endl;
return 0;
}
另请注意,写入 endl
具有写入 '\n' 然后在输出流上调用 flush()
的效果。如果你不需要flush()
,那么你应该只写'\n'。
我正在做学校作业,基本上你输入"VIP"
,vip++
就应该完成了。当我将 cin.getline
放入 while 循环时,它甚至不会构建。 getline
通常在其他代码中有效,但我这次不明白。有人能帮我吗?
代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <cmath>
int main() {
int istok = 0, zapad = 0, loza = 0, vip = 0, mladi = 0;
cout << "Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za "
"djecu i mlade."
<< endl;
char unos5;
while (unos5 != 'K') {
cin.getline(unos5, 5);
if (unos5 == 'I') {
istok++;
}
else if (unos5 == 'Z') {
zapad++;
}
else if (unos5 == 'L') {
loza++;
}
else if (unos5 == 'VIP') {
vip++;
}
else if (unos5 == 'M') {
mladi++;
}
/*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
cin>>unos5;
}*/
else if (unos5 == 'K') {
break;
}
}
cout << "Ukupna zarada od prodanih ulaznica je "
<< istok * 60 + zapad * 80 + loza * 100 + vip * 500 + mladi * 20
<< " kn." << endl;
return 0;
}
首先,cout
、cin
和 endl
都在 std
命名空间中,因此您需要将 std::
添加到它们前面#include
之后的 using std::cout;
行。
关于你的代码,istream
的getline
成员(cin
的类型)需要一个char数组,但你只定义了一个char。我建议不要使用 char 数组,而是使用自由函数 getline
获取要读取的流作为参数,并将结果存储在 std::string
中,这样可以更安全、更轻松地处理。因为你没有使用 <cstring>
而 getline
在 <string>
中,所以我更改了 #include
.
你的'VIP'也不能做一些有用的事情。这是三个字符合而为一,那是行不通的。您需要一个字符串(双引号,而不是单引号)。
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <string>
#include <cmath>
using std::cout;
using std::endl;
int main()
{
int istok = 0, zapad = 0, loza = 0, vip = 0, mladi = 0;
cout << "Unesite I za istok, Z za zapad, L za lozu, VIP za VIP (rofl), M za djecu i mlade." << endl;
std::string unos5;
while (unos5 != "K") {
std::getline(std::cin, unos5);
if (unos5 == "I") {
istok++;
}
else if (unos5 == "Z") {
zapad++;
}
else if (unos5 == "L") {
loza++;
}
else if (unos5 == "VIP") {
vip++;
}
else if (unos5 == "M") {
mladi++;
}
/*else if(unos5 != 'I' || 'Z' || 'L' || 'VIP' || 'M'){
cout<<"Unjeli ste krivo! Pokusajte ponovno."<<endl;
cin>>unos5;
}*/
else if (unos5 == "K") {
break;
}
}
cout << "Ukupna zarada od prodanih ulaznica je " << istok * 60 + zapad * 80 + loza * 100 + vip * 500 + mladi * 20 << " kn." << endl;
return 0;
}
另请注意,写入 endl
具有写入 '\n' 然后在输出流上调用 flush()
的效果。如果你不需要flush()
,那么你应该只写'\n'。