Erreur de compilation en C

lilian -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Membre Dernière intervention   12
 
Salut,

Essayes : char c = 'x';
0
lilian
 
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 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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   Statut Membre Dernière intervention   507
 
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   Statut Membre Dernière intervention   12
 
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
lilian
 
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   Statut Membre Dernière intervention   507
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention   12
 
Chose que tu pourra faire facilement en associant un "else" à ton "if" :p
0
anawak Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   9
 
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
Jerepain
 
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   Statut Membre Dernière intervention   2 > Jerepain
 
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   Statut Contributeur Dernière intervention   1 299 > Jerepain
 
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