#include <iostream>
using namespace std;
int main()
{
int num;
int array[num];
//cout << "How many numbers: ";
while( num != EOF )
{
cin >> num;
for( int i = 0 ; i<num ; i++ )
{
cin >> array[i];
}
int sb;
for ( int j = 0 ; j<num ; j++ )
{
for( int i = 0; i<num-1 ; i++ )
{
if ( array[i] % 10 > array[i+1] % 10 )
{
sb = array[i+1];
array[i+1] = array[i];
array[i] = sb;
}
if ( (array[i] % 10 == array[i+1] % 10) && (array[i] < array[i+1]) )
{
sb = array[i];
array[i] = array[i+1];
array[i+1] = sb;
}
}
}
for( int i = 0 ; i<num ; i++ )
{
cout << array[i] << " ";
}
cout << endl;
}
}
您的程式碼裡有兩條:
int num;
int array[num];
宣告了 num 之後立即作為 array 陣列的大小宣告。但是 num 是剛才配置記憶體的變數,因此不知其值。
所以 array 陣列大小未知,因此基本上會出現 Runtime Error (Segmentation Fault)。
修改方式為有兩種直覺的方式:
一是因為 num 最大到 1000,因此直接將 array 陣列宣告成大小 1000 ;
二是當輸入進 num 值時,此時再以同樣的語法宣告 array 陣列大小,就不會出錯了。
此外,您的程式碼裡有這麼一行:
while( num != EOF )
而下面接著
cin >> num
這樣子程式是無法結束的,因為就算讀到 EOF , num 也不會變成 EOF 的值。
可以將其寫作
while ( cin >> num )
這樣子 cin 在讀取失敗時(強制中斷、讀到檔案尾端等等),會回傳一個布林變數 false。此時便會跳出迴圈。
以上,希望有幫到您。