我正在阅读Stroustrup的书来学习C ++。
有一项练习:
制作一个包含十个字符串值“0”,“1”的向量,。 。 。 “九”。在将数字转换为相应的拼写值的程序中使用它;例如,输入7给出输出7。拥有相同的程序,使用相同的输入循环,将拼写出的数字转换为数字形式;例如,输入7给出输出7。
我已经完成了,这是代码:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<string> numbers = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"};
cout << "Insert a number: \n";
int number = 0;
while (cin >> number) {
cout << "\n" << number << "\t" << numbers[number] << "\n";
}
cout << "\nInsert a number spelled: \n";
string num;
while (cin >> num) {
for (int i = 0; i = numbers.size(); i++) {
if (num == numbers[i]) {
cout << "\n" << num << "\t" << numbers[i] << "\n";
}
}
}
return 0;
}
问题在于,当我运行它时,第一部分就开始了(如果我输入7则表示“七”,但是当我插入|以关闭第一个while
周期时,程序崩溃。
为什么会出现这种错误?
P.S。:对不起,如果我犯了一些语法错误,但我不是英语。
答案 0 :(得分:2)
不考虑=
循环中的愚蠢错误(==
而不是for
),目前您的结果是由于您退出第一个while
通过键入错误的输入格式(|
而不是预期的int
)循环,导致cin
处于错误状态,该状态持续到下一个while
循环,禁止进一步输入读取。
如果您希望程序在第一个while
循环后继续,则应定义终止条件,即while
循环break
的输入符号。此外,您应该包括检查(和清除)cin
stream states。
答案 1 :(得分:0)
我找到了解决此问题的方法,但是有2个字符串向量
// libraries
using namespace std;
int main()
{
vector<string> values1{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
vector<string> values2{ "zero", "one", "two", "three", "four", "five", "six","seven", "eight", "nine" };
char loop = 'y';
cout << "This program spells out digits or converts them.\n";
while (loop == 'y')
{
cout << "Please enter a digit between 0 - 9 to spell out or write a digit to convert to a number: \n";
string digit;
cin >> digit;
for (int i = 0; i < values1.size(); ++i)
{
if (digit == values1[i])
{
cout << values2[i] << endl;
}
else if (values2[i] == digit)
{
cout << values1[i] << endl;
}
}
cout << "Would you like to continue? y / n \n";
cin >> loop;
}
}
答案 2 :(得分:0)
我认为以上是错误的,最后我找到了更好的解决方案
using namespace std;
vector <string> numbers;
void init_numbers()
{
numbers.push_back("zero");
numbers.push_back("one");
numbers.push_back("two");
numbers.push_back("three");
numbers.push_back("four");
numbers.push_back("five");
numbers.push_back("six");
numbers.push_back("seven");
numbers.push_back("eight");
numbers.push_back("nine");
}
int get_number()
{
const int not_symbol = numbers.size();
int val = not_symbol;
if (cin >> val)
{
return val;
}
cin.clear();
string s;
cin >> s;
for (int i = 0; i < numbers.size(); ++i)
if (numbers[i] == s)
{
val = i;
}
if (val == not_symbol)
{
("there is no number like ", s);
}
return val;
}
int main()
{
init_numbers();
cout << "type your digit \n";
int val = get_number();
cout << "your number is " << val << "\n";
}