为啥我的两个 cin 语句没有在程序结束时运行?

Posted

技术标签:

【中文标题】为啥我的两个 cin 语句没有在程序结束时运行?【英文标题】:Why aren't my two cin statements running towards the end of the program?为什么我的两个 cin 语句没有在程序结束时运行? 【发布时间】:2018-10-16 20:59:37 【问题描述】:

我是 CS 专业的一年级学生。今天在我们的实验室中,我们必须调试一些代码并使其工作。结果如下。

#include <iostream>

using namespace std;

int main() 

   int x = 3, y;
   char myanswer;
   int val= 1;
   int num;

   y = x;
   cout << "y is set to: " << y << endl;


   bool again = true;
   int ans;
   while (again) 
      cout << "Please input a number: ";
      cin >> y;
      if (x > y)
         cout << "X is greater than Y\n";

      else 
         cout << "X is less than Y" << endl;
         cout << "would you like to input another number?" << endl;
         cin >> ans;
         if (ans != 1)
            break;
      
      cout << "would you like to input another number ?" << endl;
      cin >> ans;
      if (ans != 1)
         again = false;
   
   for (x = 0; x < 10; x++)
      cout << x << endl;

   cout << "What number would you like to find the factorial for? " << endl;


   cin >> num;
   cout << num;
   for (int x = num; x > 0; x--) 
      val *= x;
   
   cout << "Are you enjoying cs161? (y or n) " << endl;

   cin >> myanswer;
   if (myanswer == 'y')
      cout << "Yay!" << endl;
   else
      cout << "I hope you will soon!" << endl;

   return 0;


在关于阶乘的 cout 之后,cin 不起作用,用户不再能够输入输入。到目前为止,我的实验室 ta 和朋友还没有找到问题所在。该代码已在我学校的工程服务器和我的本地计算机上编译和执行。在这两个错误仍然存​​在。

【问题讨论】:

gdb 显示发生了什么? 我无法复制错误。除了每次我被问到是否要输入一个新数字时,我都会连续两次被问到这个问题。我必须同意 pm100。你为阶乘的 num 输入了什么数字? 我没有提示输入数字,这就是我遇到的问题 @jackattack825 你在运行什么编译器?当然,您的代码中存在逻辑错误,我可以轻松指出。但是在我的终端中运行它并用 g++ 编译我可以一直到你的程序结束。 使用 g++,我从下面这个人那里找出了错误,我输入 y/n 而不是 1/0 来回答以前的 cin 以某种方式破坏了程序的其余部分 【参考方案1】:

几乎可以肯定这会导致溢出

   for (int x = num; x > 0; x--) 
      val *= x;
   

你为 num 输入了什么?

【讨论】:

我猜would you like to input another number? 的响应是y/n,而预期的类型是int ^^ 这家伙搞定了,我输入了一个 n ,它把整个程序搞砸了,输入一个数字来修复它 @jackattack825,永远不要假设输入/输出操作成功。在继续使用对象之前,请务必检查是否成功。添加处理错误输入的代码。 太棒了,有没有快速解释为什么使用 char 会导致问题,因为它只是得到它的 ascii 值与 1 相比 @jackattack825,不是这样的。它必须是数字。【参考方案2】:

当你有一个声明为:

cout << "would you like to input another number?" << endl;

用户的第一反应是输入yn 作为答案。您可以通过提供提示来帮助用户。

cout << "would you like to input another number (1 for yes, 0 for no)?" << endl;

如果您这样做,最好在整个程序中保持一致。下一个寻求 y/n 响应的提示必须使用相同的机制。

cout << "Are you enjoying cs161? (1 for yes, 0 for no) " << endl;

当然,在继续使用数据之前始终验证输入操作。

if ( !(cin >> ans) )

   // Input failed. Add code to deal with the error.

【讨论】:

以上是关于为啥我的两个 cin 语句没有在程序结束时运行?的主要内容,如果未能解决你的问题,请参考以下文章

怎样让运行visual studio时生成的命令提示框持续的显示?

为啥我的模拟器没有在 Android Studio 上运行?

为啥我的 HKWorkoutSession(通常)没有结束?

为啥我的 HKWorkoutSession(通常)没有结束?

为啥我不能运行程序直到游戏结束

为啥C语言程序运行时打开后自动闪退??