gpt4 book ai didi

C++ 收银机程序不使用

转载 作者:行者123 更新时间:2023-11-28 06:29:42 25 4
gpt4 key购买 nike

我必须在不使用字符串的情况下编写程序。这是我的代码:

#include <iostream>
#include <iomanip>

using namespace std;

struct product
{
char productName[100];
double productPrice = 0;

};

const int MAX_CHAR = 101;
const int MAX_ITEM = 100;

int main()
{
product item[MAX_ITEM];
double total = 0;
int count = 0;

for (int i = 0; i < MAX_ITEM; i++)
{
cout << "Please , enter the product name(for checkout type -1) : ";
cin.get(item[i].productName, MAX_CHAR, '\n');
cin.ignore(100, '\n');

if (strcmp(item[i].productName, "-1") == 0 ) {
break;
}
else {
count++;
cout << "Please , enter the price for " << item[i].productName << " : $";
cin >> item[i].productPrice;
cin.ignore(100, '\n');

total += item[i].productPrice;
cout << endl << "Product entered : " << item[i].productName << " " << "$"
<< fixed << setprecision(2) <<item[i].productPrice << endl;
cout << "Total : $" << total << endl << endl;
}

}

cout << endl << "###############";
cout << endl << "Your Receipt : " << endl << endl;

for (int i = 0; i < count; i++) {
cout << item[i].productName << " $" << fixed << setprecision(2) << item[i].productPrice << endl;
}

cout << endl << "Total : $" << total;
cout << endl << "###############";

getchar();
getchar();
return 0;
}

我有几个问题:

  1. 如果我在 cin >> item[i].productPrice; 之后不使用 cin.ignore(100, '\n'); 为什么程序会崩溃? ?它只是没有任何条件的cin,所以它不应该在输入流中留下一个换行符?

  2. 如何检查价格是否包含不正确的输入(因此它只有十进制或 float )?

  3. 如何检查名称是否包含 >0(-1 除外)的字符和数字?

  4. 在这种情况下使用 cin.getline 会更好吗?

最佳答案

  1. cin 是一个 istream,因此如果您使用 cin.get(),它应该在流中保留换行符.我没有测试这是否是您崩溃的原因,但听起来这可能会给您带来问题。

  2. char 只是数字。 . 是 46,数字字符从 48 到 57。您可以将输入的价格读取到缓冲区中,并检查是否读取了任何不具有所需值的字符。如果发现不需要的字符,您可以决定是否要重复输入、忽略此项或退出程序。

  3. 在您的 else 分支中,检查 productName 的第一个字符是否为“-”。这样,您就已经确保 productName 不是 -1

  4. cin.getline() 丢弃换行符,因此您可以避免使用 cin.ignore()

关于C++ 收银机程序不使用 <string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27836962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com