【问题标题】:Can't input integers after reading a character [duplicate]读取字符后无法输入整数[重复]
【发布时间】:2021-10-22 13:27:59
【问题描述】:
#include <iostream>
using namespace std;

int Variable() {
    char Letter= ' ';
    cout << "Your Name: ";
    cin >> Letter;
    cout << "Your first Letter is : " << Letter;

return 0;
}

int userInput(int number)
{
    int input = 0;
    cout << "Give me your " << number << ". number: ";
    cin >> input;
    cout << "\n";
    return input;
}


int main() {

    Variable();

    int input1 = 0;
    int input2 = 0;


    input1 = userInput(1);
    input2 = userInput(2);

    cout << "Result: " << (input1 * input2) << "\n\n";
    

    return 0;
}

输出:

Your Name: Kevin
Your first Letter is : K

Give me your 1:
Give me your 2:
Result: 0

我在控制台中写了一个名字,然后我得到了第一个字母,但是之后我不能输入这两个数字,因为程序结束了。我不明白为什么程序会跳过 userInput 函数。

【问题讨论】:

  • 使用调试器单步调试代码。请注意,cin &gt;&gt; input 失败。因为evin 不是有效整数。
  • “我不明白为什么程序会跳过 userInput 函数。” -- 你的输出表明该函数没有 被跳过,因为那是Give me your 1:Give me your 2: 行的来源。更准确地说,您的困惑在于该函数中的一行。 (调试时精度很重要。)
  • 也许您希望对方输入他们的名字而不是单个字符。如果是这样char Letter= ' '; 应该是std::string firstName; 并更新代码以使用新变量。这样说的名字有点困难,因为如果这个人进入一个空间,那么空间之后的所有东西都将留在缓冲区中以供下一个输入,从而导致与当前代码相同的问题。我提到这一点是因为有些人的名字像Mary Jo
  • 请尝试以更好的方式提问:问题标题是通用的,对将来可能搜索相同内容的人没有用,并且您没有描述您为解决问题所做的任何努力问题。
  • 如果您想回答自己的问题,可以这样做。但是,您不应该通过编辑您的问题来回答。通过发布答案来回答。

标签: c++ function


【解决方案1】:

基本上问题是您提示用户提供姓名,而您只读取一个字符K

结果是,当您尝试读取数字时,仍有一些字母在等待读取evin。所以尝试读取整数会导致错误,input 的值保持不变。

一旦std::cin 进入错误状态,所有其他读取都将失败,直到您清除错误标志并丢弃读取导致错误的字符。

【讨论】:

    【解决方案2】:

    猜测一下,您假设cin &gt;&gt; 逐行读取输入,丢弃未分配给右侧操作数的任何数据。

    然而,尽管当您以交互方式运行程序时,您必须提供以整行为单位的输入,但输入通常不会以那种方式消耗。粗略地说,每个&gt;&gt; 操作将消耗来自cin 的尽可能多的数据,以适合右侧操作数类型的值,其余的留给以后的操作使用

    因此,与 ...

        char Letter= ' ';
        cout << "Your Name: ";
        cin >> Letter;
    

    ...只有一个字符从输入中读取到Letter,因为Letterchar。在您的示例中,该字符是 'K',而 evin\n 等待读取。

    当您尝试使用 ... 读入 int

        int input = 0;
        cout << "Give me your " << number << ". number: ";
        cin >> input;
    

    ...&gt;&gt; 操作失败(不消耗任何输入),因为下一个等待读取的数据不能解释为 int

    【讨论】:

      【解决方案3】:
      char Letter= ' ';
      cin >> Letter;
      int input = 0;
      cin >> input;
      

      您需要研究 cin 的工作原理。字母是一个字符,输入是一个整数。你从 cin 请求一个 char,然后请求一个 int。您需要了解/了解 cin/cout 在与 >> 运算符一起用于不同类型的变量(在您的情况下为 int 和 char)时如何工作。

      【讨论】:

      • 你改写了这个问题。你有一个答案,解释“当与 >> 运算符一起用于不同类型的变量时 cin/cout 如何工作”?用“你必须知道答案”来回答问题并不是真正的答案。
      • 这是一个有趣的观点。您是说,如果 OP 已经进行了足够的研究以怀疑问题的来源,那么应该因为缺乏努力而关闭该问题。但是,由于 OP 付出的努力少于,您认为该问题应该得到答案(而不是将该指导放在评论中)。
      • 要么 OP 知道问题出在哪里,但没有费心去寻找解决方案/告诉我们他的努力(在这种情况下我不想用勺子喂他)或(s)他geniounsly 不知道在哪种情况下我知道除非有人帮助/指导您,否则很难自行搜索。我确实指导了她,只是没有像其他答案那样给他答案。
      猜你喜欢
      • 2018-08-05
      • 2013-04-12
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2018-04-17
      相关资源
      最近更新 更多