Debutant sous xp [c] - C - Programmation
Marsh Posté le 08-12-2004 à 19:01:38
t'es pas une fille, tant pis
Nous fais pas croire que ton programme pas sous Linux, hein, tu auras les mêmes erreurs. Faudrait voir à apprendre l'anglais. Quelle partie tu as manquée dans "chaine' undeclared (first use in this function) "
fscanf(stdin,"%s",chaine);
-> fgets(chaine, sizeof chaine, stdin);
Marsh Posté le 08-12-2004 à 19:10:44
Taz a écrit : t'es pas une fille, tant pis |
Je ne comprends pas.
Les lignes en GRAS que j'ai rajouté, sont celles rajoutées sous XP.
fgets(chaine, sizeof chaine, stdin);
->a quoi cela correspond t il stp?
merci
Marsh Posté le 08-12-2004 à 20:39:50
zaynyy a écrit : Bonjour, |
Linux...
Citation : |
Aucun problème.
Citation : |
Aucun problème : demarrer / exécuter, puis tu lances cmd.exe. Le système ouvre une console ça se passe comme sous Linux. Rien à modifier. C'est le principe de la portabilité.
Attention quand même, les variables locales ('c', par exemple) nécessitent une initialisation explicite, sinon, la valeur est indeterminée.
Ceci fonctionne:
Code :
|
Marsh Posté le 08-12-2004 à 21:28:16
Emmanuel Delahaye a écrit : Linux...
|
J'essaie en fait un prog pour qu'il compte les lignes d'un fichier donné.
Mais cela ne marche pas avec ton programme. Je ne peux pas donner le nom du fichier a examiner.
Marsh Posté le 08-12-2004 à 21:39:46
c'est très gentil, mais la charte de ce forum dit que la résolution d'exercices n'est pas autorisée. Sinon, c'est l'avalanche, on récupère même souvent toute la classe, chacun y allant avec son sujet, certains recopient même leur énoncé.
Marsh Posté le 08-12-2004 à 21:43:41
zaynyy a écrit : J'essaie en fait un prog pour qu'il compte les lignes d'un fichier donné. |
Effectivement, ça ne marche pas dans Demarrer / Exécuter. Je corrige mes posts.
Par contre, ça fonctionne dans une console. Il suffit de lancer 'command' sous Win9x ou 'cmd.exe' sout NT/XP.
Ensuite, tu tapes la commande comme sous linux, sauf que le séparateur de chemin (si besoin est) est '\' au lieu de '/'
Marsh Posté le 08-12-2004 à 21:44:44
Taz a écrit : c'est très gentil, mais la charte de ce forum dit que la résolution d'exercices n'est pas autorisée. Sinon, c'est l'avalanche, on récupère même souvent toute la classe, chacun y allant avec son sujet, certains recopient même leur énoncé. |
Oui, désolé, je me suis laissé emporté par mon enthousiasme...
Marsh Posté le 08-12-2004 à 21:51:27
avec une petite faute sur le getchar
http://www.eskimo.com/~scs/C-faq/q12.1.html
Marsh Posté le 08-12-2004 à 21:58:52
Taz a écrit : avec une petite faute sur le getchar |
Voui! Je corrige.
Marsh Posté le 08-12-2004 à 22:11:22
push a écrit : et vous proposez quoi comme alternative ? |
à quoi?
Marsh Posté le 08-12-2004 à 22:13:25
ReplyMarsh Posté le 08-12-2004 à 22:14:00
ben j'ai donné un lien d'explication. Et si tu lis les 36 sujets de mosieur, j'y relève la même faute.
Marsh Posté le 08-12-2004 à 22:15:09
ReplyMarsh Posté le 08-12-2004 à 22:16:28
Taz a écrit : ben j'ai donné un lien d'explication. Et si tu lis les 36 sujets de mosieur, j'y relève la même faute. |
j'ai lu, j'ai vu ou était le problème mais à moin que je sois aveugle j'ai pas vu d'alternative
Marsh Posté le 08-12-2004 à 22:22:42
a ouais .. je savais pas que EOF en Dec faisait -1
Marsh Posté le 08-12-2004 à 22:34:34
push a écrit : a ouais .. je savais pas que EOF en Dec faisait -1 |
le problème c'est pas que ça fasse -1 ou autre chose, le problème, c'est que faut que ça soit quelque chose qui soit pas un char pour pouvoir le détecter
Marsh Posté le 08-12-2004 à 22:42:00
Taz a écrit : le problème c'est pas que ça fasse -1 ou autre chose, le problème, c'est que faux que ça soit quelque chose qui soit pas un char pour pouvoir le détecter |
La norme dit 'un int négatif'. -1 est certes un valeur courante, mais il faut utiliser l'abstraction EOF pour être portable. La définition est faite par le compilateur et ses includes...
Marsh Posté le 08-12-2004 à 22:50:44
ok ok j'avais saisi mais j'ai vu au passage se que valait EOF.
Marsh Posté le 08-12-2004 à 23:46:21
je me suis un peu amusé... arrêtez moi si je dis une connerie,
dans le cas ou EOF représente -1, le fait de le manipuler comme un char fait qu'on se retrouve à manipuler le caratère correspondant en binaire au complément à 2 de -1 à savoir 255 pour un octet. Donc ça aurait posé problème si on avait eut le caractère ÿ dans le flux.
Code :
|
plop@Antec plop $ ./a.out
push
Marsh Posté le 08-12-2004 à 18:56:55
Bonjour,
je travaille a l'école sous linuxx avec les logiciels EMACS et la console.
J'ai un programme a faire mais il y a un probleme.
Je suis sur XP avec Dev c++.
Le programme affiche en numerotant, les lignes lues sur le fichier d'entrée standard...
J'ai ecrit ce programme et il marche tres bien sous linuxx. Et ce, en ecrivant dans la console :
$./cat-num < nomdufichier
Ici, je donne directement le nom du fichier a examiner (fichier sur lequel on va compter les lignes etc...)
Mais, sous XP, comment faire cela? En effet, je n'ai pas de console, donc je ne sais pas où taper le nom du fichier de l'entrée standard...!
*Existe il une version identique a celle de linuxx sous XP?
*Peut on detourner ce probleme en rajoutant dans mon programme une ligne qui va saisir le nom du fichier a examiner?
fscanf(stdin,"%s",chaine);
->cette ligne correspond t elle a ma solution? J'ai essayé mais je ne connais pas du tout son fonctionnement.
Voila ce que m'affiche dev c++ :
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
`chaine' undeclared (first use in this function)
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
(Each undeclared identifier is reported only once
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
for each function it appears in.)
12
Voici mon programme :
/*Ce programme affiche en numérotant les lignes lues sur l'entrée
standard.*/
#include <stdio.h>
int main(void)
{
int ligne; /*Declaration des variables.*/
char c;
ligne=0;
printf("tape le nom du fichier : " );
fscanf(stdin,"%s",chaine);
getch();
/*Condition 'si il n y a pas de lignes dans le fichier d'entrée'*/
if (c<1)
{
printf("il n y a pas de lignes dans le fichier." );
}
else
{
printf ("%d ",ligne);
while ((c=getc(stdin))!=EOF)
{
/*On affiche le numero de la ligne au debut de chaque ligne*/
putc (c,stdout);
/*On affiche sur l'ecran, l'entrée*/
if (c=='\n')
{
ligne++;
printf ("%d ",ligne);
}
}
}
/*On lit sur l'entrée standard*/
getch();
return 0;
}
en gras, les lignes que j'ai rajouté pour essayer de saisir le nom du fichier SOUS XP
Qui peut m'aider svp?
Message édité par zaynyy le 08-12-2004 à 19:07:30