私は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 と array は、次のように設定されたグローバルです。
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";
}
配列番号の入力に関して問題が発生すると、配列の最初のインスタンス (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";
}