J'apprends C ++ et j'essaie de demander à l'utilisateur de saisir 4 numéros dans une fonction, puis d'imprimer simplement la matrice.
int getFourNums(); int main(int argc, char** argv){ int getNums; getNums = getFourNums(); cout << "The array is: " getNums << endl; } int getFourNums(){ int i; int myArray[4]; cout << "Enter 4 nums: "; for(i = 0; i < 4; i++){ cin >> myArray[i]; } return myArray[i];
4 Réponses :
Un problème de votre code est qu'une boucle comme se retrouvera avec Le problème principal, cependant, est que, dans C ++, vous suivrez une approche très différente et utilisez des types de collecte comme i == 4 code>. Par conséquent,
retour myarray [i] code> dépassera les limites de la matrice et / ou accédera à une valeur non initialisée puis et donner un comportement non défini. P>
std :: vecteur code> au lieu de tableaux simples. Voir le code suivant illustrant cela. J'espère que cela aide. P>
#include <vector>
#include <iostream>
std::vector<int> getFourNums(){
int val;
std::vector<int> result;
cout << "Enter 4 nums: ";
for(int i = 0; i < 4; i++){
cin >> val;
result.push_back(val);
}
return result;
}
int main(int argc, char** argv){
std::vector<int> fourNums = getFourNums();
for (auto i : fourNums) {
cout << i << endl;
}
}
Votre problème fondamental est que pour imprimer le vecteur, voir cette question . Ma préférence personnelle serait une gamme basée sur la boucle sur le vecteur; Vos goûts peuvent varier. P> P> int getfournums () code> ne peut renvoyer qu'à un entier em>, pas un tableau d'entre eux. Le problème suivant est que les fonctions ne peuvent pas renverser des tableaux bruts pour des raisons historiques. Vos choix sont de renvoyer un
std :: Array code>, un
struct code> contenant le tableau, transmettez la matrice par référence dans la fonction ou renvoyez un
std :: vecteur code>. Ma préférence pour cette application est un
std :: vecteur code> - il est flexible, et bien que pas aussi efficace que
std :: Array code>, vous devez probablement défaut à
std :: vecteur code> sauf si vous avez une bonne raison sinon. Votre code
getnums code> ressemblerait alors à:
int getfournums () code> ne vous permettra que de revenir un
int code>, pas l'ensemble de la matrice et
retour myARRAY [i]; code> est hors de limites depuis
i == 4 code>. Vous ne pouvez utiliser que la plage [0,3] en tant que indices pour votre tableau. Voici une version retravaté avec des commentaires dans le code.
#include <iostream>
#include <vector>
// don't do "using namespace std;" since it includes
// a lot of stuff you don't need.
// Here's a function that will return a vector of int's
// It'll behave much like a C style array
// but can have variable length and you can use
// a lot of standard functions on it.
std::vector<int> getNums(size_t count) {
// The "array" we'll return with "count" number of
// default constructed int:s (they will all be 0):
std::vector<int> myArray(count);
std::cout << "Enter " << count << " nums: ";
// A range based for loop that will go through
// all int:s in "myArray". "num" will be
// a reference to each int in the vector which
// means that if you change the value of "num",
// you'll actually change the value in the vector.
for(int& num : myArray) {
// read values into the int currently
// referenced by num
std::cin >> num;
}
// return the vector by value
return myArray;
}
// Put main() last so you don't have to forward declare the functions
// it uses
int main() {
// call getNums with the value 4 to read 4 int:s
std::vector<int> Nums = getNums(4);
std::cout << "The array is:";
// print each int in the vector. There's no need to use
// a reference to the int:s here since we won't be changing
// the value in the vector and copying an int is cheap.
for(int num : Nums) {
std::cout << " " << num;
}
// std::endl is rarely good when you only want to output a newline.
// It'll flush the buffer with is costly.
// Make a habit of using "\n" in most cases.
std::cout << "\n";
}
Je vois que vous voulez que vous souhaitiez retourner une matrice complète, mais il suffit de regarder votre type de retour:
#include <iostream> using namespace std; const int SIZE = 4; void getFourNums(int myArray[]); void printFourNumbers(int array[]); int main(int argc, char** argv){ int myArray[SIZE]; getFourNums(myArray); printFourNumbers(myArray); } void getFourNums(int myArray[]){ int i; cout << "Enter 4 nums: "; for(i = 0; i < SIZE; i++){ cin >> myArray[i]; } } void printFourNumbers(int array[]) { for(int i = 0 ; i < SIZE ; ++i) { cout << array[i] << endl; } }
Votre bogue est ici
retour myarray [i]; code> Votre code tente de renvoyer l'entier unique qui est à
myarray [4] code> qui est hors limites.
Vous n'imprimez pas de tableau, n'est-ce pas?
Connexes: Stackoverflow.com/questions/3473438/ReTurn-Array -in-A-FunCti sur
De plus, si vous vouliez renvoyer un tableau
int getnums; code> ne fonctionnerait pas car il s'agit d'un seul entier non pas un tableau.
Le moyen
c ++ code> est d'utiliser
std :: array code> ou
std :: vecteur code> bien que si cela est une exercice académique qu'ils voudront peut-être que vous fassiez ce que vous feriez dans
C code>
@Stephanlecherner Je viens d'essayer de retourner la matrice à utiliser dans une autre fonction, mais j'essayais de l'utiliser dans ma fonction principale pour voir si elle remplissait correctement
@ user2348258 "< J'essaie simplement de renvoyer le tableau i>" pour l'instant, la signature de
int gefournums () code> signifie que la fonction renvoie un seul
int < / code>. Pas un tableau.
Le tableau est en cours de remplissage correctement, mais vous retournez MyARRAY [4] depuis que je == 4 à ce moment-là. Notez que la matrice n'a pas d'élément à cette position, il est donc de retourner une mémoire invalide et il est renvoyé juste un int.
Les tableaux ne peuvent pas être attribués, c'est donc renvoyer un tableau ne fonctionne jamais. Mieux que vous puissiez obtenir, c'est un pointeur sur le tableau, mais puisque la variable locale est conforme à l'intérieur
getfournour code>, un pointeur à celui-ci est inutile. La mémoire n'est pas valide au moment où la fonction d'appel peut faire n'importe quoi avec elle. Les tableaux sucent.