簡體   English   中英

C++ 程序在沒有輸入向量的情況下終止

[英]C++ program terminates without even taking the input for vector

我正在嘗試將n整數輸入到向量中。 以下是我用來這樣做的代碼。 首先,我要求 n 的值,然后輸入所有這n整數。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> input(n);
    for (int i = 0; i < n; i++)
    {
        cin >> input[i];
    }
    return 0;
}

我不知道為什么程序在沒有任何輸入的情況下終止,我看不出這段代碼有任何缺陷,而且它似乎對其他人來說很好,但對我來說卻不是。


這是執行此程序后終端的樣子。 這是執行此程序后終端的樣子。

輸入示例:
5
5 3 1 5 2


當我嘗試在 windows 終端中編譯程序時,出現此錯誤錯誤

運行錯誤

當輸入流中有一些不可解析為數字的數據時, n設置為 0。

這可能是由於您的終端向輸入流發送換行符,或者根本沒有設置轉發終端輸入(如約翰提到的)。

從不同的終端運行它或添加一個解決方法,只接受大於 0 的數字:

int n = 0;
while (n == 0) {
  cin >> n;
}
// ...

問題更新后編輯:

錯誤截圖表明問題不是你的代碼,而是你機器上安裝的軟件。 自加載標准庫后引發此錯誤,但未找到您使用的編譯器的函數特異性。

一種解釋是您安裝了多個編譯器,另一種是您將一些錯誤的 dll 復制到應用程序的目錄中。 您也可能提供了一些奇怪的編譯器標志。

所以請檢查您的機器上安裝了什么以及您的應用程序的當前目錄中有什么(是否有一些 dll)?

命令行截圖( 請不要這樣做)表明您正在以錯誤的方式構建項目。 使用gcc不會將 C++ 標准庫鏈接到代碼中。 您應該使用g++ ,然后標准庫將隱式鏈接到您的程序。

奇怪的是您的程序無法構建(控制台屏幕截圖)並且您以某種方式運行它導致運行時錯誤(錯誤消息框圖像)。

舊答案

仍然可以有效。

請提供輸入示例。

  • 如果您提供了負值,則可以拋出異常,終止程序而沒有任何輸出。
  • 其他解釋您輸入了無效值並且std::cin處於錯誤狀態。 在這種情況下, std::cin在處理錯誤之前不會做任何事情。

這是正確輸入、負大小或無效的無數值的演示

您在聲明和分配值時是錯誤的。 請記住,您使用的是vector而不是任何類型的array

根據您的設置,正確的語法是:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int numbers;

    vector<int> input;

    cout<<"How many numbers? ";
    cin>>numbers;

    int temp; /* temporary value used in vet.push_back() */

    for (int i = 0; i < numbers; i++) {
        cout<<"Vector input: ";
        cin>>temp;
        input.push_back(temp);
    }

    cout<<"Size of vector: "<<input.size()<<"\n";

    // for output
    for (int i = 0; i < input.size(); i++)
        cout<<input[i]<<" ";

    return 0;
}

實際上,向量是動態的。 你不需要給它一個預定義的維度。 它以默認大小聲明,每次達到最大大小時,它都會加倍。 它使用起來很舒服,但由於它需要碎片和未使用的區域,因此效率不高。

在像您這樣的程序上,但是您可以使用動態數組。

最后一件事,如果您使用矢量,請考慮#include <vector>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM