【发布时间】:2011-08-09 07:13:57
【问题描述】:
要求: 变量、数据类型和数值运算符 基本输入/输出 逻辑(if 语句、switch 语句) 循环(for、while、do-while) 数组
编写一个程序,要求用户输入 10 个人(第 1 个人、第 2 个人、...、第 10 个人)早餐吃的煎饼数量 输入数据后,程序必须分析数据并输出哪个人早餐吃的煎饼最多。
★ 修改程序,让它也输出哪个人早餐吃的煎饼最少。
★★★★ 修改程序,使其按照10个人吃的煎饼数量的顺序输出一个列表。 IE。 第4人:吃了10个煎饼 第 3 个人:吃了 7 个煎饼 第 8 人:吃了 4 个煎饼 ... 第 5 个人:吃了 0 个煎饼
我写的当前版本:http://codepad.org/QHnt11CT
#include <iostream>
#include <string>
void bubbleSort(int arr[], int n) {
bool swapped = true;
int j = 0;
int tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < n - j; i++) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
swapped = true;
}
}
}
}
int main()
{
int pancakeAmount[10];
std::string consumers[10];
for (int i = 0, j = 1; i < 10; i++, j++) {
std::cout << "Please enter an amount of pancakes eaten by consumer"\
" number " << j << "." << std::endl;
std::cin >> pancakeAmount[i];
std::cout << "Please enter the name of the person who ate that amount"\
" of pancakes." << std::endl;
getline(std::cin, consumers[i]);
}
std::cout << "The results from least amount eaten to the greatest amount"\
" eaten are as follows:" << std::endl;
bubbleSort(pancakeAmount, 10);
for (int k = 0; k < 10; k++) {
std::cout << pancakeAmount[k] << std::endl;
}
return 0;
}
这就是我目前正在解决的问题。截至目前,这个问题的前两个目标已经解决,没有任何值得注意的问题。
然而,第三个目标被证明有点困难。我很难设计/实现带有适当标签的排序列表。在第 47 行,我试图获取一个名称或标签以提供相应的金额。
我遇到了一个问题,控制台将接受我要分配的金额,但会完全忽略对 getline() 函数的调用并循环回请求另一个金额。在调用“std::cin >> pancakeAmount[i]”之前调用 getline() 函数时,我可以在第一个循环中提供输入,但后续循环会产生我在 getline() 函数运行时遇到的错误在代码中的原始位置。
我是否试图以不正确的方式使用字符串数组,或者 getline() 函数没有被正确使用?
【问题讨论】:
-
★★★★★ 为你的“真实”问题添加新行,如果你期望答案,不要下命令,在你的问题上付出一些努力。
-
为什么要分行输入?将“名称#”作为您的输入很容易。作为替代实现,您可以将每个“煎饼记录”存储为类或结构。然后创建这些类型的数组。当你遍历你的列表时,你可以在你的排序算法中移动整个记录(移动指针会更有效,但是对于这么小的集合大小,你可以使用完整的副本)。排序后,遍历完整实施的列表,并在最后记录最少煎饼数量。
标签: c++