C++循环逻辑错误?

标签 c++

我在 C++ 逻辑循环工作时遇到一些问题。根据测试,我认为这是 Grades() 函数循环中的错误。

基本上,该程序应该获取姓名和测试分数,它似乎是这样做的,但程序在那之后立即退出,我不确定为什么。只是想看看其他人是否注意到函数中可能导致程序提前终止的错误。

// Grades
void Grades(char names[][length], double grades[][4])
{
    for(int i = 0; i < amount; i++)
    {
        cout << "Name: ";
        cin.ignore();

        cin.getline(names[i],length, '\n');

        cout << "Test Scores: ";

        for(int k = 0; k < 4; k++)
        {
            int num = 0;

            while(!(cin >> num) ||
                  num  < 0 ||
                  num > 100 ) 
            {
                cout << "invalid entry." << endl;
            }

            grades[i][k] = num;
        }
    }
}

最佳答案

每个 C++ 初学者都会遇到的问题……iostream 错误是“粘性”的,并且会一直存在,直到您在流上调用 clear 为止。

while(!(cin>> num) || num  < 0 || num > 100 ) 
{
    cout << "invalid entry." << endl;
    cin.clear(); // reset the error so cin evaluates to true
    cin.ignore( -1 ); // ignore the offending input
}

此外,getline 之前的 cin.ignore() 将忽略名字的第一个字母。

您应该使用 std::string 而不是 char 数组。

除此之外,只要输入格式正确,程序基本上就能正常工作。这是我的系统上的输出。请注意,Bob 的首字母被截断,并且 Bob 和 Jane 的名字后面有未初始化的字符,因为字符数组没有被视为 C 样式字符串。

Student: ob_???_
Average Score: 60.00 Grade Letter: D

Student: jane   ???_?
Average Score: 70.00 Grade Letter: C

Student: mary
Average Score: 80.00 Grade Letter: B

Student: todd
Average Score: 90.00 Grade Letter: A

Student: alice
Average Score: 100.00 Grade Letter: A

但奇怪的是,ideone.com确实运行了该程序,但由于某种原因没有显示其输出。我不知道。

正如 Evan 提到的,如果您通过双击运行命令行程序,Windows shell 将默认退出。从预先存在的交互式 shell 运行以查看输出。 system( "pause"); 是不可移植的并且非常糟糕的做法。

关于C++循环逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439645/

相关文章:

c++ - 函数调用在反汇编代码中似乎无法正常工作

c++ - 在 windows 中使用互斥量进行进程间同步(win32 或 C++)

c++ - 将子节点添加到 XML 结构的顶部。 boost 属性树

c++ - 如何删除我提供透明背景图像的 QDialog 的边框?

c++ - 如何将单独的数组排序在一起(类似于按一列对表格进行排序)?

c++ - 具体方法模板

c++ - 动态推断函数的返回类型

c++ - 代码审查的好地方在哪里?

带有自定义比较器存储空指针的 C++ STL 映射

c++ - 为什么这个简单的 C++ 代码不能用 clang++ 编译?