2008-09-17 8 views
2

Lorsque plusieurs instructions scanf() sont rencontrées dans le code, à l'exception de la première instruction scanf(), toutes les autres sont ignorées, c'est-à-dire qu'il n'y a pas d'invite de saisie pour celles scanf() déclarations lorsque le code est exécuté.Instructions scanf() (et cin) ignorées lors de l'utilisation de gcc

J'ai essayé quelques suggestions. Par exemple, l'utilisation de flushall() a été suggérée sur certains sites, mais cela donne une erreur de compilation.

Toute aide grandement appréciée.

[Le code a été ajouté comme an answer.]

+0

Ajouter un exemple rapide avec échec? –

+0

Peut être plus facile d'aider avec


1) Le code
2) L'entrée de l'utilisateur –

Répondre

0

J'ai toujours pensé scanf() était dangereux car il peut laisser votre flux d'entrée dans un état indéterminé.

Je préfère utiliser d'autres commandes (plus sûres) pour introduire une chaîne (fgets et autres), puis utiliser sscanf pour la traiter. Ensuite, vous pouvez toujours sauvegarder au début de la chaîne et redémarrer.

0

Cela ressemble à un problème de conversion. Il se peut qu'une conversion% s ne se termine jamais ou que vous spécifiiez un caractère qui n'est jamais entré ou quelque chose comme ça. Je suggère ce qui suit: a. Essayez quelque chose comme: int a = 0; int b = 0; scanf ("% d", & a); scanf ("% d", & b); printf ("a =% d, b =% d \ n", a, b); Si cela fonctionne, essayez d'augmenter les conversions pour voir lequel cause le problème.

3

Vérifiez la valeur de retour de scanf()! "Scanf renvoie le nombre d'éléments d'entrée affectés, qui peut être inférieur ou égal à zéro, en cas d'échec de correspondance. aucune conversion n'a été affectée, généralement en raison d'un caractère d'entrée invalide, comme un caractère alphabétique pour une conversion «% d» La valeur EOF est renvoyée si une erreur de saisie se produit avant toute conversion, comme une fin de fichier Si une erreur ou une fin de fichier se produit après le début de la conversion, le nombre de conversions qui ont été effectuées avec succès est renvoyé. "

2

Un exemple du code et entrée améliorerait définitivement notre capacité à vous aider avec votre problème spécifique car il y a beaucoup de situations potentielles qui peuvent causer le problème.

Exemple (je peux penser rapidement):

  • La chaîne de format ne correspond pas au caractère suivant sur le flux d'entrée. Le scanf ne lit donc rien.
  • Le tampon d'entrée stdin est uniquement vidé lorsqu'il est plein ou retourné.
  • L'entrée d'une ligne de saisie peut être utilisée par plusieurs instructions scanf. Les instructions scanf suivantes reprennent là où le dernier est resté éteint. Ainsi, le programme ne s'arrête pas pour l'entrée de l'utilisateur.
  • Le% s se comporte différemment sur scanf et printf
    printf imprime une chaîne entière.
    scanf il lu UN espace séparé mot
0

Le code simple, comme il est:

#include <stdio.h> 
int main() 
{ 
long int z,s,n,i,j,m,x; 
scanf("%ld ",&z); 
for(i=0; i<z; i++) 
    { 
    scanf("%ld",&s); n=0; 
    for (j=0; j<s; j++) { scanf("%ld",&m); n+=m; } 
    x=n+s-1; 
    printf("%ld\n",n); 
    } 
return 0; 
} 

Compilation:

D:\edycja>gcc WSEGA.c -o WSEGA.exe -Wall 

D:\edycja>WSEGA.exe 

D:\edycja> [Where was the program!?] 
0

toujours utiliser "" fflush (stdin); "" avant tout "scanf();" instruction car à moins que et jusqu'à ce que vous n'effacez pas le flux d'entrée standard, l'instruction scanf lira la valeur déjà présente dans std i/p.

Questions connexes