程序流程中的C ++未知错误/错误

时间:2015-03-25 14:02:39

标签: c++ if-statement switch-statement

我只是在回顾C ++而我不知道为什么3和5是唯一可行的选择。我已将它转换为if-else语句,但仍然是同一个问题。以下是代码:

#include <iostream>
using namespace std;

int main()
{
    char c, s[50] = {'\0'};
    int num;

    cout << "Select cin method:" << endl;
    cout << "1. cin.get(c);" << endl;
    cout << "2. cin.get(s, 10);" << endl;
    cout << "3. cin.get(s, 10, '*');" << endl;
    cout << "4. cin.getline(s, 10);" << endl;
    cout << "5. cin.read(s, 10);" << endl;
    cout << "Select: " << flush;
    cin >> num;

    switch (num) {
        case 1:
            cin.get(c); //  cin >> c;
            break;
        case 2:
            cin.get(s, 10); //  cin >> s; max length 10, '\n' as string terminator
            break;
        case 3:
            cin.get(s, 10, '*');    //  cin >> s; max length 10, '*' as string terminator
            break;
        case 4:
            cin.getline(s, 10);     //  cin >> s; max length 10, '\n' as string terminator
            break;
        case 5:
            cin.read(s, 10);        //  cin >> s; max length 10, records '\n'
            break;
        default:
            break;
    }

    if (num == 1)
        cout.put(c);                //  cout << s;
    if (num >= 2 && num <= 5)
        cout.write(s, 15);          //  cout << s; max length 15
}

每当我为num输入1/2/4时,它就会绕过switch和else-if语句。我已经尝试通过&#34; cout&lt;&lt;&lt;&lt;&lt;&lt;&lt; NUM&#34;它获得的价值是正确的。我也没有收到任何错误消息。以下是我得到的样本:

Select cin method: 
1. cin.get(c); 
2. cin.get(s, 10); 
3. cin.get(s, 10, '*'); 
4. cin.getline(s, 10); 
5. cin.read(s, 10); 
Select: 1 
-------------------------------- 
Process exited after 1.676 seconds with return value 0 Press any key to continue

1 个答案:

答案 0 :(得分:3)

它没有绕过switch,它正确执行它。问题是,在读取数字后,输入流中有一个额外的字符(在数字后按\n),这会导致您在案例1,2和4中看到的行为。在这些情况下你正在进行的下一次读操作会发现\n并停止阅读。

要修复它,您可以在cin >> num

之后添加类似的内容
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

(包括<limits>