2012-02-08 98 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變量被聲明瞭兩次。

相關問題