所以我尝试设置一个while循环来不断询问(y/n),但是当我按下'y‘并输入它时,它怎么会跳过"char itemtitle“而直接跳到"double itemprice”呢?我是c++新手,请帮帮忙,我很感激
#include <cstdlib>
#include <iostream>
#include <sstream>
using namespace std;
#define tax 9.99
#define shipping ("Free")
void printmessage ()
{
cout << "*Thanks for your business! We'll ship out your item as soon as possible*\n"
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";
}
int main(int argc, char** argv)
{
cout << "Write an invoice program and print it to the console.\n";
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n;
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
"Welcome to my Pc Store.\n"
"'Where Technology is served right'\n"
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"<< endl;
char name [256];
cout << "Enter your full name: ";
cin.getline (name, 256);
char organization [256];
cout << "What's your organization?: ";
cin.getline (organization, 256);
char quit = 'y';
do {
char itemtitle [256];
cout << "Enter name of Laptop you'd like to order: ";
cin.getline (itemtitle, 256);
double itemprice;
cout << "Enter price of item: $";
cin >> itemprice;
int quantity;
quantity = 1;
cout << "How many items?: ";
cin >> quantity;
if (quantity == 1) {
cout << "1 item(s)\n";
} else {
cout << quantity << " item(s)\n";
}
cout << "Tax: $" << tax;
double subtotal;
subtotal = quantity * itemprice + tax;
cout << "\nSub Total: $" << subtotal;
cout << "\n";
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"
"Validation:\n\n";
cout << "Item(s):\t\t\t\t\t" << "Amount:\n";
cout << itemtitle << "\t\t\t\t\t$" << quantity * itemprice + tax; ;
cout << "\n" << quantity << " * $" << itemprice << " + $" << tax;
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";
cout << "Payment (Credit/Debit only)!\n\n";
double cardnum;
cout << "Card Numbers: ";
cin >> cardnum;
int ssn;
cout << "SSN: ";
cin >> ssn;
cout << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
"Invoice Details:\n\n";
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
cout << "Date&Time: " << ("Current local time and date: %s", asctime (timeinfo));
cout << name;
cout << "\n" << organization;
cout << "\n" << "("<< quantity << ")" << " " << itemtitle;
cout << "\n\t\t\t" << "Total: $" << quantity * itemprice;
cout << "\n\t\t\t" << "Tax: $" << tax;
cout << "\n\t\t\t" << "Shipping: " << shipping;
cout << "\n\n\t\t\t" << "Balance Due: $" << quantity * itemprice + tax;
cout << "\n\t\t\t" << "Payment: " << "Paid" ;
cout << "\n\n\nDo you want to continue shopping? (y/n): ";
cin >> quit ;
cout << "\n\n";
} while (quit != 'n');
cout << "\n\n\n";
printmessage ();
return 0;
}
发布于 2013-02-23 03:51:05
std::cin.operator>>()
将'\n'
字符留在缓冲区中,这使得它在getline
中几乎不可用。您必须选择其中之一,然后相应地更改代码。
例如,只使用getline
,然后在内部解析结果字符串。
发布于 2013-02-23 04:05:59
当您同时使用"cin >>“和"cin.getline()”来读取用户输入时,大多数情况下都会遇到这个问题。在使用">>“运算符时,在读取输入后,'\n‘会留在输入流中,这会导致随后对"getline”的调用立即返回。
有两种解决方案。
首先,在"cin.getline(itemtitle,256);“之前添加"cin.ignore();”。"cin.ignore()“从输入序列中提取字符并丢弃它们。它将清除输入流。
其次,将"cin.getline(itemtitle,256);“替换为"cin >> itemtitle;”。我建议在代码中使用"cin.getline“或"cin >>”,但不要同时使用。"cin >>“会更好。
此外,应该将"#include < ctime >“放在代码的顶部。
https://stackoverflow.com/questions/15032017
复制相似问题