我正在编写一个程序来查找4位数字的地址。该程序应不断允许用户输入数字,直到解决正确的答案为止。其他参数是:
到目前为止,我已经编写了该程序,无论输入是什么,它都会为我提供“地址正确”的相同输出。试图弄清楚我在做什么错,但没有成功。这是我到目前为止编写的代码。
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
int const Address = 9837;
int input;
char Y;
char N;
int sum;
int even;
int i;
cout << "Please enter a 4-digit number." << endl;
cin >> input;
{
while (input = Y || N)
{
if (input = Y)
cout << "Please enter a 4-digit number" << endl;
else if (input = N)
cout << "Good Bye!!" << endl;
return 0;
}
while (input != Address && Y && N)
{
if (sum = input == !27);
cout << "Not a valid address - the sum of the digits is not 27" << endl;
if (input % 2 == 0)
cout << "Not a valid address - the number is even." << endl;
}
input = Address;
cout << "Address is correct." << endl;
}
}
答案 0 :(得分:2)
您包括了<cmath>
和<string>
,但您没有使用这些标头中的任何内容。
将变量声明/定义为尽可能接近/需要使用它们的地方。
您正在使用未初始化的变量N
和Y
。它们包含不确定的值(=垃圾)。如果char
恰好是unsigned
,则允许在某些特定条件下读取不确定的值(未初始化的(unsigned) char
)。但是您使用N
和Y
的方式是,读取它们的值会导致未定义的行为。
从不使用变量even
和i
。
使用cin >> input;
尝试从标准输入中提取int
eger。如果用户输入Y
或N
或不是int
的任何其他字符,提取将失败。您需要两种不同的方式来获取用户输入:1让用户输入自己的猜号码; 1让用户选择是否再次玩游戏。
您在{
之后引入了一个毫无用处的块(cin >> input;
)。
while (input = Y || N)
...在C ++(和C)中使用运算符==
进行了比较,但是分配了=
。表达式input = Y || N
将Y || N
的结果分配给input
,但是由于Y
和N
尚未初始化,因此包含值0
的机会为相当低(0 || 0
的取值为false
),输入几乎总是1
({true
转换为int
就是1
),并且循环将始终执行。
实际上,读取Y
和N
的值会导致未定义的行为,因为它们尚未初始化。从理论上讲(因为编译器知道Y
和N
的值不确定),它可以生成喜欢的任何代码。
在第一个while
循环内:
if (input = Y) // is again an assignment, not a test for equality cout << "Please enter a 4-digit number" << endl; else if (input = N) // again cout << "Good Bye!!" << endl; return 0; // will always exit the program, no matter the value of input
如果所有地狱都崩溃了,N
和Y
偶然都是0
,因此可以到达第二个while
循环, ,则input
为0
(因为否则,第一个while
循环的受控语句将被执行,并由return 0;
退出程序)。当input
等于0
时,它不等于Address
,因此input != Address
会产生true
,但由于我们知道N
和{{1} }是Y
(0
),而false
给出true && false
时,第二个false
循环的受控语句将不会执行。
我将跳过第二个while
循环的受控语句的内容。足以说,他们没有按照您认为的去做。
while
input = Address; // that assignment serves no purpose
是变量cout << "Address is correct." << endl;
和Y
为N
时您总是会得到的输出,这可能会发生(特别是在运行调试代码时)。
请远离您当前正在学习C ++的资源。获得一本好教科书,然后重新开始。
答案 1 :(得分:0)
您在此处捕获的代码缺少某些内容或不完整?我看到Y,N和sum没有分配任何值,因此所有条件检查都失败了……最终它将始终显示“地址正确” ...
答案 2 :(得分:0)
您需要了解的几件事:
cin >> input;
应该在while循环中i
整数,但是您从未使用过它。换句话说:您的编译器必须向您发出许多警告。你看着他们吗?
答案 3 :(得分:0)
请记住=和==完全不同。 =表示分配。例如:int x = 100;表示将值100放入变量x。 ==表示比较或(等于)。例如:if(x == 100),表示x的值为100。
此外,如果您要为“是”或“否”选择变量, 您应该这样进行: 字符 if(ans =='Y'|| ans =='N“)
由于您的输入变量是一个int,而您的选择变量是一个char,因此while语句无效。