为什么当你输入一个空的if语句时程序仍然为整数变量产生一个值(零)?
这是一个比较三个整数和打印的简单程序,如果它们中的全部或任何一个都大于10。在第42行,有一个带分号的空else语句。如果用户输入z为6,则程序不应返回z1 = 0。
#include <iostream> // include iostream class for input and output
#include <string> // for strings operation
#include <sstream> // for stringstream operations
using namespace std; // use defintion from std namespace
int main ()
{
int x, y, z; // define three user-input integers
int x1, y1, z1; // variables to hold bool values
stringstream xyz; // variable to store whole bool value
int XYZ; // variable to condiition print
// prompt user for x, y and z input
cout << "Please enter x" << "\n";
cin >> x;
cout << "Please enter y" << "\n";
cin >> y;
cout << "Please enter z" << "\n";
cin >> z;
// generate bool values of x1, y1, z1
if ( 10/x < 1)
x1 = 1;
else
x1 = 0;
if ( 10/y < 1)
y1 = 1;
else
y1 = 0;
if ( 10/z < 1)
z1 = 1;
else
;
// read into xyz and then XYZ
xyz << x1 << y1 << z1;
xyz >> XYZ;
// generate 8 print statements
if (XYZ == 111)
;
if (XYZ == 000)
cout << "x, y, z < 10" << endl;
if (XYZ == 110)
cout << "x, y > 10 and z < 10" << endl;
if (XYZ == 101)
cout << "x, z > 10 and y < 10" << endl;
if (XYZ == 100)
cout << "y, z < 10 and x > 10" << endl;
if (XYZ == 011)
cout << "y, z > 10 and x < 10" << endl;
if (XYZ == 010)
cout << "x, z < 10 and y > 10" << endl;
if (XYZ == 001)
cout << "x, y < 10 and z > 10" << endl;
} // program main ends
我花了几个小时研究这个,但大多数讨论都是关于if语句之后的分号或其他一些主题的语法错误。
(注意:执行第51行已更正,但在控制台上没有显示任何内容。)
有没有人在Mac OSX 10.8.4上跨过这个?它与默认的LLVM编译器有关吗?
感谢。
答案 0 :(得分:3)
在评论中提到 - 你得到(非)幸运。
在C ++中,如果从未分配过没有声明初始值的变量,最终可能会查询任何值。有时这个值为0,有时这个值是0xcccccccc
,有时这个值是堆栈中最后的值 - 它取决于你的编译器,你的程序的内存布局,你早餐吃的东西等等。
如果您没有为z1
分配值,则无法对其行为进行假设。如果它最终为0,那只是巧合。
答案 1 :(得分:0)
Jerry Coffin在你对你的问题的评论中提到了这一点。我测试了它,这是问题。你可能已经解决了它,但你提供的文字实际上是八进制文字,而不是十进制,所以除非你运气好,否则这些陈述不会成立。
答案 2 :(得分:-4)
在变量声明期间,z1默认初始化为0。由于如果z = 6,z1不会被修改,因此z1将保持为0.