用于跳过换行符以读取菜单的功能

时间:2017-11-09 20:59:54

标签: c++ function input while-loop

在Uni,我们必须编程LIFE,因此必须制作一个菜单。要读取用户对菜单的输入,我们应该编写一个读取函数来处理/删除换行符/输入。我们写了以下内容:

char reading ( ) {
    char input ;
    while (input != '/n') {
        cin.get (input) ;
        return input;
    } 
} 

如果我们用此功能替换现在的cin,我们输入第一个菜单选项后会打印两次菜单。如果我们输入类似kkk的东西,这不是菜单的选项,它会打印菜单4次。我问了一个帮助助手,他不知道,发现这个功能似乎是正确的,而且他现在不知道的可能是非常明显的。据说我们的菜单代码也没什么问题。你知道可能出了什么问题,可以向我解释一下吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

你永远不会初始化input,所以当你第一次在循环中阅读时,你会有未定义的行为,因此你的程序完全没有意义。读取未初始化的变量是UB,简单明了。

你的代码还有其他问题(比如并不总是从声明返回char的函数中返回一个值),但是UB胜过所有 - 只要代码有UB,没有其他真正重要的