Erreur de compilation en C

Fermé
lilian - 9 nov. 2005 à 13:37
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 11 nov. 2005 à 12:09
Bonjour , j'ai écrit ce petit programme en C , qui prend est un programme qui copie son entrée en sortie , en remplaçant les espaces par la lettre x :

#include <stdio.h>

int main()

{

int a;
char c;

c = 'x';

while ((a = getchar()) != EOF)
if ( a == ' ')
putchar(c);
}



et gcc me dire que il y a une erreur de syntaxe ligne 10 , c undeclared ( first use in this function ) , quelqu'un sait comment résoudre le problème svp?

merci

8 réponses

Z3uS-Su3Z Messages postés 94 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 11 juin 2007 12
9 nov. 2005 à 13:42
Salut,

Essayes : char c = 'x';
0
ben non çà va pas , moi j'ai appris à déclarer une variable , donc ici :

char c;

et ensuite à lui donner une valeur ( c'est l'affectation je crois ) , j'ai jamais vu qu'on écrivait char c = 'x'; normalement c'est déclaration et affectation , çà va pas cette histoire çà m'embrouille...
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
9 nov. 2005 à 14:05
Euh c'est parfaitement standard d'initialiser à la déclaration c'est même à mon avis une bonne habitude à prendre.

Chez moi ça compile, (aussi bien en initialisant à la déclaration où en le faisant en deux fois) je ne comprends pas trop :
#include <stdio.h>

int main(){
    int a;
    char c='x';
    while ((a=getchar())!=EOF){
        if (a==' ') putchar(c);
    }
    return 0;
}



Et à l'excution ça fait ce que tu veux :
(mando@seiko) (~) $ ./a.out
assasas fafafef dafdfaaz
xx
faf afaa  fafeafaeaf affaf
xxxx

Par contre on est obligé de quitter le bazar avec ctrl c car je vois pas trop comment déclencher un eof au clavier.

Perso j'ai gcc 4.0.2 (tu peux verifier ta version avec gcc --version) mais je doute que ça vienne de là... Vérifie en copiant le code ci dessus ce que ça donne chez toi...

Bonne chance
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
9 nov. 2005 à 14:08
Salut,

Perso j'ai fait copier/coller entre cette page et mon éditeur de texte (vi) puis
sauvegarder sous le nom gcc_pb.c puis "gcc -o gcc_pb gccpb.c" et pas de pb
Précises un peu ton problème : OS, version de gcc, ligne de compilation
En premier lieu, regardes si tu as pas un caractère 'à la con' dans ton source.

Pour info, je suis sous slackware linux 10.1 avec gcc 3.3.4 lors du test.
A+, crabs
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Z3uS-Su3Z Messages postés 94 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 11 juin 2007 12
9 nov. 2005 à 14:08
LOL

On peut déclarer et instancier( affecter une valeur pour la première fois) en même temps.

C'est même conseillé, autant que possible pour éviter de lire dans la variable avant justement de lui avoir affecter une valeur.

Ensuite je suis pas un pro en C, mais je me défends bien en C++, et je ne vois aucune erreur dans ton programme.

Sinon deuxièeme solution si la première ne te convient pas c'est :
putchar('x');

et de virer ta variable c, vu qu'elle ne sert plus.

Ceci dit, l'erreur gcc est bizarre.... Ce compilateur n'a pas pour habitude de déclarer une erreur là ou il n'en a pas...
0
alors mon programme compile , mais plusieurs choses étranges :

Mon OS : mandrake 10.2

gcc 3.4.3

mon programme marche , ce qui est curieux c'est que je tape cette phrase :

coucou , tu vas bien, moi pas mal , et je dois taper sur la touche entrée au lieu de CTRL + d pour avoir le résultat , et le résultat c'est :

xxxxxxx , vu qu'il y a 7 espaces , hors moi je ne veux pas çà , je veux que ma phrase reste mais avec les x au lieu des espaces , je devrais donc avoir :
coucoux,xtuxvasxbien,xmoixpasxmal
0
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
9 nov. 2005 à 14:42
Normal, ton algo dit si j'ai un espace j'affiche un 'x'
Il lui manque : 'pour tout autre caractère, j'affiche ce caractère'
A+, crabs
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 nov. 2005 à 10:32
Salut,

Pour s'amuser voilà un petit script en Perl, qui fait ce que tu veux en C.
#! /usr/bin/perl -w
use strict;

print "Entrez une phrase : ";
chomp(my $chaine=<STDIN>);
$chaine=~s/\s+/x/g;
print "$chaine\n";


Et le résultat
[lamitest@localhost bin]$ perl suppr_espace_dan_fichier.pl
Entrez une phrase : coucou, tu vas bien, moi pas mal
coucou,xtuxvasxbien,xmoixpasxmal
0
Z3uS-Su3Z Messages postés 94 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 11 juin 2007 12
9 nov. 2005 à 15:38
Chose que tu pourra faire facilement en associant un "else" à ton "if" :p
0
anawak Messages postés 53 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 1 août 2010 9
9 nov. 2005 à 16:00
ce n'est que le debut moi je vois plein d'erreur (d'indentation,et de syntaxe).

je te propose de jeter un coup d'oeil sur le miens(bon j'ai pas bien verifié ,mais c'est meilleurs que le tien)

#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[]){
char entree[20];
char sortie[20];
int i;
if(argc!=2){
sprintf(stder,"USAGE [CHAINE DE CARACTERE],argv[1]);
exit(1);
}
entree=argv[1];
for(i=0,i<20,i++){
if(strcmp(entree[i],' ')==0){
sortie[i]='x';
}
else{
sortie[i]=entree[i];
}
}
printf("votre chaine est :%s\n",sortie);
}
0
J'ai le même problème : j'ai fait un programme tout con qui permet de visualiser un entier après l'avoir saisi (ce qui ne sert à rien, mais c'était juste pour exposer le problème :D).


#include <stdio.h>
#include <conio.c>
#include <math.h>

main()
{
int a;

clrscr();

gotoxy(5,5);
printf("Saisissez un entier");
scanf("%d",&a);
printf("Visu de l'entier : %d",a);

getch();
}

Il me met la même erreur pour 3 fonctions : `clrscr' undeclared (first use this function)
`gotoxy' undeclared (first use this function)
`getch' undeclared (first use this function)

J'ai pas compris les explications du dessus car je fais mes 1ers pas en C. Please help !!En plus ce programme marche nikel au bahut, alors que chez moi ça marche pas :'(
0
nicO.2x45 Messages postés 76 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 17 novembre 2007 2 > Jerepain
11 nov. 2005 à 01:38
Salut Jerepain !
Je pense que je ferais bcp plus simple pour afficher un entier que je saisi, moi je ferais :

#include <stdio.h>

void main()
{
int a;
printf("Entier ?\n");
scanf("%d",&a);

printf("\nVisu de l'entier a = %d",a);
}

Voila moi comment je ferais pour saisir un entier et l'afficher ensuite !
:)
++Jerepain
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298 > Jerepain
11 nov. 2005 à 12:09
Salut.
Jerepain, je remarque que toute les fonctions qu'il ne reconnait pas font partie de la même bibliothèque. Et il me semble que c'est <stdlib.h>.
sous certaine configuration, certain fichier en tete sont inclus par défaut.
Voila
0