我對C++相當陌生,但邏輯上我認爲這應該起作用。第一次迭代失敗
我有一個函數,它接受來自用戶的輸入來設置所述存儲器分配的數組:
void setarraynum(){
string mystr;
cout<<"Please enter the size of your array: ";
getline(cin, mystr);
stringstream(mystr)>>arraynum;
array = new int [arraynum];
cout<<"\n";
}
arraynum和陣列全局設定爲:
int arraynum;
int * array;
我然後有一個功能需要陣列輸入:
void setarray(){
string mystr;
cout<<"Please enter "<<arraynum<<" numbers:\n";
for(int n=0; n<arraynum; n++){
getline(cin, mystr);
stringstream(mystr)>>array[n];
};
cout<<"\n";
}
問題出現在進入th e數組中,數組的第一個實例(array [0])自動設置爲0.如同循環迭代第一次迭代而不要求用戶輸入。然後繼續詢問用戶是否正常。
任何想法?
謝謝。
*編輯(按照要求,該代碼的全部):
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int arraynum;
int * array;
bool isin = false;
int input;
char order;
void insertionsortdesc(int a[]);
void insertionsortasc(int a[]);
void getarray(int a[]);
void isinarray(int a[], int b);
void setsearch();
void setarray();
void setarraynum();
void setorder();
int main(){
cout<<"\n//// INPUT ////\n\n";
setarraynum();
setorder();
setarray();
setsearch();
if(order=='a'){insertionsortasc(array);
}else if(order=='d'){insertionsortdesc(array);};
cout<<"//// OUTPUT ////\n\n";
getarray(array);
isinarray(array, input);
return 0;
}
void setorder(){
bool isvalid = false;
while(!isvalid){
cout<<"Ascending or Descending [a/d]: ";
cin>>order;
if(order=='a'||order=='d'){isvalid = true;
}else{cout<<"Please enter a valid option!\n";};
};
cout<<"\n";
}
void setarraynum(){
string mystr;
cout<<"Please enter the size of your array: ";
getline(cin, mystr);
stringstream(mystr)>>arraynum;
array = new int [arraynum];
cout<<"\n";
}
void setsearch(){
string mystr;
cout<<"Search for (int): ";
getline(cin, mystr);
stringstream(mystr)>>input;
cout<<"\n";
}
void setarray(){
string mystr;
cout<<"Please enter "<<arraynum<<" numbers:\n";
for(int n=0; n<arraynum; n++){
getline(cin, mystr);
stringstream(mystr)>>array[n];
};
cout<<"\n";
}
void insertionsortdesc(int a[]){
for(int n=1; n<arraynum; n++){
int key = a[n];
int j = n-1;
while((j>=0)&&(a[j]<key)){
a[j+1] = a[j];
j -= 1;
};
a[j+1]=key;
}
}
void insertionsortasc(int a[]){
for(int n=1; n<arraynum; n++){
int key = a[n];
int j = n-1;
while((j>=0)&&(a[j]>key)){
a[j+1] = a[j];
j -= 1;
};
a[j+1]=key;
}
}
void isinarray(int a[], int b){
for(int n=0; n<arraynum; n++){
if(a[n] == b){
isin = true;
break;
};
};
if(isin){
cout<<b<<" is present in the given array.";
}else{
cout<<b<<" is not present in the given array.";
};
cout<<"\n\n";
}
void getarray(int a[]){
cout<<"Sorted array sequence: ";
for(int n=0; n<arraynum; n++){
cout<<a[n]<<", ";
};
cout<<"\n\n";
}
在'setarray',打印出每次用'getline'讀線,以驗證輸入是否正確。另外,'std :: vector'有什麼問題? –
使用'std :: vector'而不是'new []'並使用參數並返回值而不是使用全局變量。 – chris
當我這樣做時,第一次迭代不打印。說我說數組內存分配爲5,setarray循環只要求4個輸入。我不知道std :: vector是什麼。我目前正在學習和使用我所學的知識來製作一個簡單的排序程序。 –