Probleme d'execution en c
Résolu/Fermé
xko
Messages postés
55
Date d'inscription
mardi 15 mars 2016
Statut
Membre
Dernière intervention
28 juillet 2022
-
Modifié par xko le 15/03/2016 à 15:48
cptpingu Messages postés 3836 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 11 février 2023 - 15 mars 2016 à 19:24
cptpingu Messages postés 3836 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 11 février 2023 - 15 mars 2016 à 19:24
A voir également:
- Probleme d'execution en c
- Erreur d'execution 1004 - Forum Programmation
- Un administrateur vous a refusé l'execution de cette application - Forum Windows 10
- VBA erreur 1004 ✓ - Forum VB / VBA
- Microsoft a bloqué l'exécution des macros car la source de ce fichier n'est pas approuvée ✓ - Forum Excel
- Erreur d'execution 13 ✓ - Forum Programmation
3 réponses
cptpingu
Messages postés
3836
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 février 2023
2
Modifié par cptpingu le 17/03/2016 à 15:15
Modifié par cptpingu le 17/03/2016 à 15:15
Ah ouais, en fait il cross post ça partout...
https://codes-sources.commentcamarche.net/forum/affich-10062064-les-tableaux-en-c
C'est bel et bien "&t[i]" qu'il faudrait utiliser (les deux fonctionnent, cela dit), ou alors "t + i" (oui, oui, "t + i" fonctionne, car scanf demande un pointeur).
À noter aussi que la solution proposée par Henry_Merdocul ne fonctionne qu'en C99 et supérieur, et a certaines limitations, cf: https://stackoverflow.com/questions/10675399/why-cant-the-size-of-a-static-array-be-made-variable
Une bonne solution serait de "malloc" la bonne taille ou alors prévoir une taille fixe assez grande (et empêcher l'utilisateur de la dépasser). Le VLA c'est un peu cracra quand même. Je précise en passant que le C++ ne gère pas le VLA, donc si on fait du C en compilant avec un compilo C++ (comme le font la plupart des débutants qui pensent, à tort, que le C++ est un surensemble du C), ça va apporter son lot de surprises :p.
https://codes-sources.commentcamarche.net/forum/affich-10062064-les-tableaux-en-c
Ici c'est t[i] et non &t[i]
C'est bel et bien "&t[i]" qu'il faudrait utiliser (les deux fonctionnent, cela dit), ou alors "t + i" (oui, oui, "t + i" fonctionne, car scanf demande un pointeur).
À noter aussi que la solution proposée par Henry_Merdocul ne fonctionne qu'en C99 et supérieur, et a certaines limitations, cf: https://stackoverflow.com/questions/10675399/why-cant-the-size-of-a-static-array-be-made-variable
Une bonne solution serait de "malloc" la bonne taille ou alors prévoir une taille fixe assez grande (et empêcher l'utilisateur de la dépasser). Le VLA c'est un peu cracra quand même. Je précise en passant que le C++ ne gère pas le VLA, donc si on fait du C en compilant avec un compilo C++ (comme le font la plupart des débutants qui pensent, à tort, que le C++ est un surensemble du C), ça va apporter son lot de surprises :p.
Tu ne déclares pas ton tableau correctement.
Quand on met une variable pour une taille de tableau, elle doit toujours avoir une valeur. De plus, la variable "n" que tu utilises n'a même pas été déclarée.
Dans ta boucle pour le remplir, tu pars de la case numérotée 1, or un tableau commence à la case numérotée 0.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ int i,j,x,s,n;
puts("donner la taille du tableau ");
scanf("%d",&n);
int t[n];//On déclare le tableau avec la valeur de "n" demandée
puts("remplir le tableau svp\n");
for(i=0;i<n;i++){
scanf("%d",&t[i]);}
puts("notre tableau est maintenant rempli\n");
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(t[i]>t[j]){
x=t[i];
t[i]=t[j];
t[j]=x;}} }
for(i=0;i<n;i++){
printf("%d\n",t[i]);}
puts("entrer un indice : ");
scanf("%d",&s);
puts("\n");
for (i=0;i<n;i++){
if(i==s){
for(i=s;i<n;i++){
t[i]=t[i+1];
n=n-1;
} }}
puts("le tableau apres la suppression\n");
for(i=0;i<n;i++){
printf("%d\n",t[i]);}
system("pause");
return 0;
}
Réessaye comme ça;
Quand on met une variable pour une taille de tableau, elle doit toujours avoir une valeur. De plus, la variable "n" que tu utilises n'a même pas été déclarée.
Dans ta boucle pour le remplir, tu pars de la case numérotée 1, or un tableau commence à la case numérotée 0.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ int i,j,x,s,n;
puts("donner la taille du tableau ");
scanf("%d",&n);
int t[n];//On déclare le tableau avec la valeur de "n" demandée
puts("remplir le tableau svp\n");
for(i=0;i<n;i++){
scanf("%d",&t[i]);}
puts("notre tableau est maintenant rempli\n");
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(t[i]>t[j]){
x=t[i];
t[i]=t[j];
t[j]=x;}} }
for(i=0;i<n;i++){
printf("%d\n",t[i]);}
puts("entrer un indice : ");
scanf("%d",&s);
puts("\n");
for (i=0;i<n;i++){
if(i==s){
for(i=s;i<n;i++){
t[i]=t[i+1];
n=n-1;
} }}
puts("le tableau apres la suppression\n");
for(i=0;i<n;i++){
printf("%d\n",t[i]);}
system("pause");
return 0;
}
Réessaye comme ça;
Sugel
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
724
15 mars 2016 à 17:33
15 mars 2016 à 17:33
argh. la coloration syntaxique ?
xko
Messages postés
55
Date d'inscription
mardi 15 mars 2016
Statut
Membre
Dernière intervention
28 juillet 2022
1
15 mars 2016 à 18:11
15 mars 2016 à 18:11
meeeeeeeeeeeerciiiiiiii ☺ ☺ ☺