int年;是-2,但我没有给它一个值
int year; is coming up as -2 but i have not put a value to it
我是C++的新手,在理解为什么我的整数年是-2时遇到了一些问题。据我所知,我没有给它设定一个值。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int age;
string mystring;
mystring = "Did you enjoy the game?";
int day, month;
int year;
cout << year << "n";
cout << "Game Over!" << endl;
cout << "You Lose!" << endl;
cout << mystring << endl;
cout << "What was the best part of the game? n";
cout << "Was it the graphics? n";
cout << "Please put in your age: ";
cin >> age;
cout << "The age you put in is: " << age << endl;
cout << "Please put in the day (1-31) and the month (1-12) in thier numerical values: " << endl;
cin >> day >> month;
cout << "So today is " << month << "/" << day;
system("Pause");
}
一切都很好。谢谢你们所做的一切。我以为如果它没有值,它会自动变为0,但现在我发现它没有。再次感谢。
year
的值尚未初始化,当编译器读取未初始化的变量时,会导致未定义的行为。它可以是内存中的任何值,真的。这完全取决于你的电脑和编译器。
这样做总是一个BAD的想法,因为它会导致错误的代码,
根据经验,总是在调用变量之前初始化该值。
还要记住,在某些编译器中,必须包含#include <string>
(当使用字符串时),否则代码将无法运行。
在C++中,您不会为不使用的东西付费。这意味着在语言中有一些地方编译器可以做得更多,但如果开发人员实际上不想做这些事情(出于性能或其他原因),就没有了。
这(变量初始化)就是其中一种情况:如果你没有显式地为POD变量赋值(或调用它的构造函数),你就不能假设它会有任何值。在这种情况下,编译器所做的是为year
分配堆栈内存,并且变量将使用堆栈上该位置内存中的任何内容进行初始化(在您的情况下,当解释为int时,该位置为-2)。
注意:这个编译器策略的另一个例子是当您删除动态分配的内存时:poointer通常保留旧地址(不再有效)。
相关文章:
- 包装一个对象并假装它是一个 int
- 无法一次从二进制文件中读取一个 int
- 当我输入一个字母时,cin 输入(输入是一个 int),而不是打印错误一次,它打印正确一次,然后在循环的其余部分打印 i
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- 如何将私有整数从A类传递到C 类B类的另一个INT变量
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 结构C++可以用 0 初始化,但不能用另一个 int 初始化
- 将一个int []转换为字符串,而无需明确的c 循环
- 如何通过另一个int变量递增int变量
- C++根据输入返回一个字符串或一个int
- 如何在另一个结构 arrya 中的一个结构中初始化一个 int 数组
- 两个 UShorts 之间的操作在 VC2015 中给出了一个 int
- turbo 如何在 C++ 的系统() 函数中放入一个 int varriable
- 无限输入C 计算器要结束计算,需要再进行一个INT
- 带有两个INT列表的结构将减少为一个INT
- 在c#中构建一个int数组,每个int调用c++或在c++中构建并传递给c#
- 对于具有 3 个无符号字符和一个 int 的结构来说,对于unordered_map来说,什么是好的哈希函数?
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 如何在C 中的结构内设置一个int数组
- 为什么在我的测试程序中,从字符缓冲区读取一个int时,"std::copy"5x(!)比"