我正在使用 Visual Studio 在 C 中撰寫非常簡單的程式,但我不斷收到 2 個錯誤,我可以使用一些幫助。
當我在應用程式崩潰后運行本地 Windows 除錯器時有時會彈出一個,它說:
應用程式無法正確啟動(0xc0000142)
運行時有時會出現訊息
我猜第二個發生在cin >> kwota;之后。. 不知道什么時候,因為 VS 沒有顯示任何例外。它只是來自作業系統的一個訊息框。它說:
除錯斷言失敗!
[...]
檔案:“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector”
行:1566
運算式:向量下標超出范圍
將第二次放入 cin 后的訊息
這里有我的代碼。我不知道是什么原因造成的,所以任何幫助都會很棒。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int wyznaczZlote(vector<int> c, int z, int k)
{
int nowakwota, pozycja, ilosc;
if (z > k)
return 0;
for (int p = k/z; p >= 0; p--)
{
nowakwota = k % z;
while (nowakwota > 0)
{
pozycja = c.size() - 1;
while (c[pozycja] > nowakwota && pozycja >= 0)
{
pozycja--;
if (pozycja < 0)
break;
}
if (pozycja < 0)
break;
ilosc = nowakwota / c[pozycja];
nowakwota = nowakwota % c[pozycja];
}
if (nowakwota == 0)
return p;
}
return -1;
}
int main()
{
int ilecyna, ilezloto, kwota, liczbazlotych;
vector<int> cyna;
vector<int> zloto;
string wejscie, wejscie2;
cin >> ilecyna;
cin.ignore();
getline(cin, wejscie);
stringstream wejscieStream(wejscie);
int element;
for (int i = 0; i < ilecyna; i )
{
wejscieStream >> element;
cyna.push_back(element);
}
sort(cyna.begin(), cyna.end());
cin >> ilezloto;
cin.ignore();
getline(cin, wejscie2);
stringstream wejscieStream2(wejscie2);
for (int i = 0; i < ilecyna; i )
{
wejscieStream2 >> element;
cyna.push_back(element);
}
sort(zloto.begin(), zloto.end());
cin >> kwota;
liczbazlotych = wyznaczZlote(cyna, zloto[0], kwota);
cout << '\n';
if (liczbazlotych >= 0)
cout << liczbazlotych << '\n';
else
cout << "NIE" << '\n';
cin.ignore();
getchar();
}
謝謝!
uj5u.com熱心網友回復:
這份宣告
cin >> wejscie;
遇到空格字符時只輸入一個單詞。
所以這個for回圈沒有意義。
stringstream wejscieStream(wejscie);
int element;
for (int i = 0; i < ilecyna; i )
{
wejscieStream >> element;
cyna.push_back(element);
}
>>而不是在此陳述句中使用運算子
cin >> wejscie;
看來您需要使用std::getlinelike
std::getline( std::cin, wejscie );
但在使用它之前,您需要清除輸入緩沖區,例如
#include <lomits>
//...
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
還有這個for回圈
for (size_t p = k/z[0]; p >= 0; p--)
是一個無限回圈,因為p具有無符號整數型別的變數size_t永遠不能小于0.
而這個while回圈是可疑的
while (c[pozycja] > nowakwota)
pozycja--;
因為沒有檢查是否pozycja小于0。
并使用英文單詞作為變數的識別符號。否則,大多數用戶將無法閱讀您的代碼。
也不清楚為什么第二個引數表示一個向量
vector<int> z
而唯一一個它的元素z[0]在函式中使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/426851.html
上一篇:為什么itertools.product不按順序從字典中回傳鍵和值?請幫助
下一篇:用戶名id和密碼id要對應
