2013-05-17 2 views
-5

La description de l'entrée:Comment résoudre ce code?

Votre programme sera testé sur un ou plusieurs scénarios de test. Chaque cas de test est constitué d'un seul nombre positif (0 < n0 < 1 000 000).

La dernière ligne du fichier d'entrée a un seul zéro

Je viens tapé un code comme celui-ci (qui ne fait pas partie des cas de test.):

int main() 
{ 
    int n0; 

    while((scanf("%d", &n0)) != 0) 
    { 
    .......... 
    } 

mais pourquoi quand entrée 0 encore traitée? .

+5

Votre titre est extrêmement mauvais. – Maroun

+1

C'est incroyable. – SubSevn

+1

'scanf' renvoie le nombre de conversions réussies. Vous devez vérifier la valeur de 'n0'. –

Répondre

1
while (1) { 
    scanf("%d", &n0); 
    if (n0==0) break; 
    ... 
} 
+0

Merci, c'est du travail .. –

+0

Ensuite, vous devez utiliser le bouton accepter. Bienvenue sur stackoverflow! – jakber

1

0 est toujours traitée parce que la valeur de retour de scanf est le nombre d'éléments qu'il est rempli Dans le cas où votre fichier d'entrée se termine par 0, il retournera 1 - zéro.

Vous souhaitez détecter lorsque votre valeur est zéro, puis sortir de la boucle.

+0

ok, merci. Compris :) –

0

Ceci est un endroit parfait pour utiliser l'un des opérateurs rarement mémorisés par C, l'opérateur "," ou de séquençage. Voici votre code réécrite pour en faire usage:

#include <stdio.h> 

int main() 
    { 
    char *str[] = { "123", "456", "789", "0" }; 
    int i = 0; 
    int n0; 
    int scanret; 

    while((scanret = sscanf(str[i], "%d", &n0)), n0 != 0) 
    { 
    printf("i = %d n0 = %d scanret = %d\n", i, n0, scanret); 
    i += 1; 
    } 

    printf("i = %d n0 = %d scanret = %d after loop termination\n", i, n0, scanret); 
    } 

Jetez un oeil à la condition de la boucle while. Ce qui se passe ici est que le sscanf est évalué en premier, puis le test n0 != 0 est évalué. Notez que ce n'est PAS un opérateur 'et' ou 'ou' (comme vous pouvez le constater en examinant l'exemple de sortie ci-dessous) - le sscanf est exécuté et le résultat de n0 != 0 est utilisé comme test pour la boucle while car while utilise la valeur de la dernière expression évaluée dans sa condition comme valeur de la condition.

Si vous exécutez cela, vous obtiendrez une sortie similaire à:

i = 0 n0 = 123 scanret = 1 
i = 1 n0 = 456 scanret = 1 
i = 2 n0 = 789 scanret = 1 
i = 3 n0 = 0 scanret = 1 after loop termination 

Partager et profiter.

Questions connexes