为什么这个程序在第一次循环后崩溃了?

时间:2015-10-26 18:46:30

标签: c++

我正在阅读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。:对不起,如果我犯了一些语法错误,但我不是英语。

3 个答案:

答案 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";


 }