为啥我的两个 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;
用户的第一反应是输入y
或n
作为答案。您可以通过提供提示来帮助用户。
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(通常)没有结束?