我寫了一個程序,返回用戶定義數組的中值。雖然我在代碼中放了一些檢查(數組大小不能爲負數),但我仍然遇到了一個我無法修復的問題(爲了清楚起見,假定不使用字符串和字母字符)。浮動破壞我的代碼
我的所有輸入值都是int
但是用戶可以輕鬆地輸入浮點數。當他們這樣做(無論是數組大小還是輸入元素)都會破壞我的代碼。我已經嘗試了多種方法來試圖捕獲這個問題,但是看起來我的程序獲得的價值不能及時捕獲。
#include <iostream>
using namespace std;
void sort(int * a,int n)
{
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j)
{
if(a[i]>a[j])
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}\
}
return;
}
int main()
{
int n;
int check;
int x;
cout<<"Enter length of array:";
cin>>n;
if (n < 0){
while (n < 0){
cout << "Please enter a length greater than 0" << endl;
cin >> n;
}
} else if (n % 1 != 0){
while (n % 1 != 0){
cout << "Whole numbers only! Try again" << endl;
cin >> n;
}
}
if (n == 0){
cout <<"You try to enter numbers, but there's no place to put them." << endl;
cout << ":(";
return 0;
}
int a[n];
cout<<"Enter values one by one:\n";
for(int i=0;i<n;++i){
cin >> x;
a[i] = int(x);
}
sort(a,n);
if (n % 2 == 1){
cout<<"Median is:"<<a[n/2]<<endl;
}
else{
float z = (float(a[n/2]) + float(a[(n/2)-1]))/2;
cout << "Median is:" << z << endl;
}
return 0;
}
我想第一件事情是抓住浮像這樣
`if (n % 1 !=0){
while(n % 1 !=0){
cout << "Enter a whole number"
cin >> n
}
}`
這仍然打破了我的計劃。奇怪的是我輸入了float
,然後打印出n
的值,它只顯示int值。
我嘗試使用typeid.n()
與#include <typeinfo>
並將其與int類型進行比較以檢查它是否是正確的值,但是也滑過了。
我試圖做一個int
投,像int(n)
後立即號碼存儲在n
但在此之前它進入a[n]
並再次,它仍然打破了我的代碼。
我如何檢查float
用戶輸入並循環它們,直到他們給我一個int
?
這是一個奇妙的想法(和一個我會在這種情況下使用),所以你說這是不可能的讀入一個浮點數值的int?或者考慮到這個簡單的解決方案,解決方案可以避免長而毫無意義。 – Podo
哦!發現問題。用戶仍然可以輸入數組大小的浮點值。這打破了代碼:/任何其他想法? – Podo
@JeffreyDilley如果你停止思考「輸入浮動值」的話,我認爲事情會變得更加混亂。你沒有輸入一個浮點數。您正在輸入一系列字符。除非像這樣解析,否則什麼都不是float/int /等等。所以如果你輸入'3','.','1','4',但是嘗試把它解析爲一個'int',你會得到'3',因爲這很酷,那麼你會碰到'然後在那裏停下來,因爲那不是很酷,那麼這個流就停留在那裏。另一方面,如果你嘗試將它解析爲'float',它會吃掉'.','1','4'就好了。 –