Erreur après compilation
float
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Ben voila je commence la programmation en c et je m'bloque sur cette exercice (plus bas). Après compilation je n'est en tout et pour tout qu'une seul erreur, seulement il en affiche 2 répétés plusieurs fois:
passing arg 1 of 'sscanf' makes pointer from integer whithout a cast
passing arg 1 of 'gets' makes pointer from integer whithout a cast
exercice
Écrire une fonction permettant de remplir 2 tableaux de dimension n et m. La fonction devra ensuite calculer les moyennes, les comparer et retourner la plus grande
On suppose que la fonction reçoit comme paramètre les dimensions des tableaux
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//les dimensions sont les paramettre de la fonction
float dim(int n,int m)
{
float tab1[n],tab2[m],som1,som2,moy1,moy2;
int i,controle;
char ligne;
som1=0;
som2=0;
//saisie des valeurs des deux tableaux
printf("Tableau 1");
for(i=0;i<n;i++){ printf("Saisissez l'element %d:\t",i+1);
gets(ligne);
controle=sscanf(ligne,"%f",&tab1[i]);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%f",&tab1[i]);
}
while(controle<1);
}
som1=som1+tab1[i];
}
printf("\n");
moy1=som1/n;
printf("Tableau 2");
for(i=0;i<m;i++){ printf("Saisissez l'element %d:\t",i+1);
gets(ligne);
controle=sscanf(ligne,"%f",&tab2[i]);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%f",&tab2[i]);
}
while(controle<1);
}
som2=som2+tab2[i];
}
printf("\n");
moy1=som1/n;
if(tab1[i]<tab2[i]){return 1;}
else{return 0;}
}
int main()
{
int n,m,controle;
char ligne;
//Saisie des dimensions
printf("Saisissez la dimension du tableau1:\t");
gets(ligne);
controle=sscanf(ligne,"%d",n);
while(!controle){ do{ printf("Saisissez un entier:\t");
gets(ligne);
controle=sscanf(ligne,"%d",&n);
}
while(controle<1);
}
printf("Saisissez la dimension du tableau2:\t");
gets(ligne);
controle=sscanf(ligne,"%d",m);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%d",&m);
}
while(controle<1);
}
printf("\n");
//Appelle de la fonction
dim(n,m);
system("PAUSE");
return 0;
}
Ps: Je développe sous dev-c++ 4
Merci de vous être intéressé a mon probléme
Ben voila je commence la programmation en c et je m'bloque sur cette exercice (plus bas). Après compilation je n'est en tout et pour tout qu'une seul erreur, seulement il en affiche 2 répétés plusieurs fois:
passing arg 1 of 'sscanf' makes pointer from integer whithout a cast
passing arg 1 of 'gets' makes pointer from integer whithout a cast
exercice
Écrire une fonction permettant de remplir 2 tableaux de dimension n et m. La fonction devra ensuite calculer les moyennes, les comparer et retourner la plus grande
On suppose que la fonction reçoit comme paramètre les dimensions des tableaux
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//les dimensions sont les paramettre de la fonction
float dim(int n,int m)
{
float tab1[n],tab2[m],som1,som2,moy1,moy2;
int i,controle;
char ligne;
som1=0;
som2=0;
//saisie des valeurs des deux tableaux
printf("Tableau 1");
for(i=0;i<n;i++){ printf("Saisissez l'element %d:\t",i+1);
gets(ligne);
controle=sscanf(ligne,"%f",&tab1[i]);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%f",&tab1[i]);
}
while(controle<1);
}
som1=som1+tab1[i];
}
printf("\n");
moy1=som1/n;
printf("Tableau 2");
for(i=0;i<m;i++){ printf("Saisissez l'element %d:\t",i+1);
gets(ligne);
controle=sscanf(ligne,"%f",&tab2[i]);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%f",&tab2[i]);
}
while(controle<1);
}
som2=som2+tab2[i];
}
printf("\n");
moy1=som1/n;
if(tab1[i]<tab2[i]){return 1;}
else{return 0;}
}
int main()
{
int n,m,controle;
char ligne;
//Saisie des dimensions
printf("Saisissez la dimension du tableau1:\t");
gets(ligne);
controle=sscanf(ligne,"%d",n);
while(!controle){ do{ printf("Saisissez un entier:\t");
gets(ligne);
controle=sscanf(ligne,"%d",&n);
}
while(controle<1);
}
printf("Saisissez la dimension du tableau2:\t");
gets(ligne);
controle=sscanf(ligne,"%d",m);
while(!controle){ do{ printf("Saisissez un nombre:\t");
gets(ligne);
controle=sscanf(ligne,"%d",&m);
}
while(controle<1);
}
printf("\n");
//Appelle de la fonction
dim(n,m);
system("PAUSE");
return 0;
}
Ps: Je développe sous dev-c++ 4
Merci de vous être intéressé a mon probléme
A voir également:
- Erreur après compilation
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Une erreur s'est produite instagram ✓ - Forum Instagram
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Erreur 0x80070643 - Accueil - Windows
2 réponses
Salut,
Il y a plusieurs problèmes.
Il ne faut jamais employer gets, mais lui préférer fgets. gets prend un argument un char* et non un char.
T'as oublié une esperluette devant la variable n dans le premier sscanf de main.
D'ailleurs tu peux utiliser do while et ne pas respecter cette portion.
Même remarque pour la variable m.
Et enfin dernière remarque, n'oublie pas de poster ton code en utilisant les balises "code" (à droite du bouton souligné).
Cdlt
Il y a plusieurs problèmes.
Il ne faut jamais employer gets, mais lui préférer fgets. gets prend un argument un char* et non un char.
T'as oublié une esperluette devant la variable n dans le premier sscanf de main.
D'ailleurs tu peux utiliser do while et ne pas respecter cette portion.
Même remarque pour la variable m.
Et enfin dernière remarque, n'oublie pas de poster ton code en utilisant les balises "code" (à droite du bouton souligné).
Cdlt
Merci d'avoir bien voulu me répondre. Dzl pour le code je suis un peut tête en l'air :p
Concernant ta première remarque: J'ai remplacé les gets par fgets et la 8 erreurs s'affiche a la compilation mais bon je n'en voit que 4 : Les 2 d'avants et
too few arguments to function `fgets'
too few arguments to function `sscanf'
Concernant la deuxième
Concernant ta première remarque: J'ai remplacé les gets par fgets et la 8 erreurs s'affiche a la compilation mais bon je n'en voit que 4 : Les 2 d'avants et
too few arguments to function `fgets'
too few arguments to function `sscanf'
Concernant la deuxième
D'ailleurs tu peux utiliser do while et ne pas respecter cette portion., je ne l'ai pas bien comprise
Le prototype de fgets n'est pas le même que gets, c'est d'ailleur ça qui fait que c'est mieux.
Le prototype est fgets(char* chaine ,int size, FILE*fstream). Le premier argument, c'est pour la chaine de caractère, size la taille et le dernier tu mettras le flux stdin.
Un exemple :
Pour le do while, ce que je veux dire :
peut-être simplifié en :
Cdlt
Le prototype est fgets(char* chaine ,int size, FILE*fstream). Le premier argument, c'est pour la chaine de caractère, size la taille et le dernier tu mettras le flux stdin.
Un exemple :
char chaine[10]; fgets(chaine,sizeof(chaine),stdin); //pour convertir en nombre int nb=strtol(chaine,NULL,10); //tu peux utiliser comme tu as fait sscanf
Pour le do while, ce que je veux dire :
scanf("%d",&n);
while(n<0){
scanf("%d",&n);
}
peut-être simplifié en :
do{
scanf("%d",&n);
}while(n<0);
Cdlt