2012-02-08 74 views
0

我使用Visual C++ 2010 Express Edition编译和运行用C++编程语言编写的.exe文件。我正在尝试使用C++创建一个基于循环的逻辑来询问用户他选择输入多少个条目,并提出仅限于该条目的问题。条目。例如,我想输出“您希望输入多少个字符?”:假设用户将回答作为'3'存储在int变量'entries'中。然后我想在问题停止前继续问这个问题3次,并继续下一行代码。我希望你明白,这里是展示我在做什么的代码块:Visual C++ - 运行时检查失败#3 - 变量未启动

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    cout << "How many values do you need to enter?: "; 
    int entries; 
    cin >> entries; 
    int offset, number; 
    string valueName[50]; 
    float valueValue[50]; 
    for (offset = 0; offset < entries; offset++) 
    { 
     cout << "Enter " << number << " Value Name: "; 
     cin >> valueName[offset]; 
     cout << "Enter " << valueName[offset] << "\'s value: "; 
     cin >> valueValue[offset]; 
     for (number = 1; number <= entries; number++) 
     { 
     } 
    } 
    char response; 
    cin >> response; 
    return 0; 
} 

奇怪的是,当我运行这个简单的程序,它不能当我输入值的名称被插入到的第0个元素valueName []数组。它只是暂停程序的执行,并弹出一个对话框,说“运行时检查失败#3 - 变量'编号'正在使用,没有被初始化!”关于这个程序的另一个问题是,在相当一段时间里,当我运行这个程序时,这个“运行时检查失败#3”框从未出现过,而当它没有出现时,数值出错了,并且首先从1开始,并且然后下一个循环跳到6,然后再次重复6,进入下一个循环!
请帮帮我!我已经在网上查到过这个问题,但它并不适用于我的问题类型!
是否因为变量超出了范围?
但是它们被声明在for循环之外吗?

所以请帮助我!

+0

如果有什么超出范围,编译器不开心。如果你得到运行时错误,这意味着你通过了编译阶段。语法上一切都是正确的。 – Mahesh 2012-02-08 19:13:23

+0

如果您在收到该消息时进入调试器,则会使用未初始化的变量将您置于正确的位置。此外,构建应该给你一个警告:'警告C4700:未初始化的本地变量'数'使用'所有这一切都告诉你究竟是什么以及问题在哪里。 – 2012-02-08 20:39:09

+0

非常感谢Mahesh和Michael Burr的见解,我很高兴地告诉大家,由于您和其他人的合作,问题已经解决。非常感谢你。 – 2012-02-09 06:57:44

回答

5

运行时告诉你实际情况,在将数字声明为int但尚未给出数值后,下面一行出现。

cout << "Enter " << number << " Value Name: "; 

在你的代码如下声明,在C++中,这意味着给我2个整数,但值尚未定义,例如

int offset, number; 

将其更改为这样的事情..

int offset = 0; 
int number = 0; 
+0

非常感谢您的合作'eggbox'。我很高兴地告诉你,由于你和其他人的意见,问题已经解决了! – 2012-02-09 06:55:04

2

您打印可变number没有先分配给它,即它是未初始化。当它打印一些随机数时,这是因为你运行程序时在内存中发生了什么。在使用它之前为它分配一个值。

+0

你说的是对的,并且感谢你的评论和其他许多人,我已经能够解决我的问题。非常感谢Joachim Pileborg。 – 2012-02-09 06:56:43

2

的问题正是你得到的错误消息。您正在使用变量号码而无需初始化它。

您使用的变量就在这里,在你的循环顶部,当它没有被初始化为任何事情:

cout << "Enter " << number << " Value Name: "; 

什么是数字变量的用意何在?它似乎并没有达到任何目的。如果你要打印你目前使用的入口,你可以使用偏移变量,而不是像这样:

cout << "Enter " << offset << " Value Name: "; 

但仍似乎有点我不清楚。

但是,您遇到问题的原因是因为该值未初始化,所以您遇到未定义的行为。这也是Visual Studio并不总是能够抓住它的原因;它可能总是以调试模式捕获,但在释放模式下它几乎不会捕获它。在使用它们之前,您需要初始化所有变量。

+0

谢谢你'罗伯特凯利'为你在这个问题上的合作,我已经有一段时间了。我很高兴地告诉你,由于你和其他人的意见,问题已经成功解决。谢谢。 – 2012-02-09 06:56:01

0

就我而言,这是因为extern变量被声明了两次。

相关问题