2017-04-26 5 views
-5

Dans mon code deuxième scanf ne fonctionne pas et ne pouvait pas lire le caractère. Comment puis-je résoudre ce problème?Scanf ne fonctionnait pas

#include <stdio.h> 
int main() { 
int a, result; 
// ***************** Menu ******************* 
printf("Hello !!! \n The Operations That This Calculator Can Do :"); 
printf("\n1. Simple Operations"); 
printf("\n2. Calculate The Biggest Number"); 
printf("\n3. Taylor expansion"); 
printf("\n4. Sum Digits Of a Number"); 
printf("\n5. Found The Prime Numbers Before The Number That You Entered"); 
printf("\nEnter The Number Of Operation That You Want : "); 
scanf_s("%d", &a); 
if (a == 1){ 
    char ch; 
    int num1, num2; 
    printf("\n Please Enter Your Operation Like That (- 5 3) : "); 
    scanf_s("%c", &ch); 
    if (ch == '-'){ scanf_s("%d", &num1); scanf_s("%d", &num2); result = num1 - num2; printf("\n > %d", result); } 
    if (ch == '+'){ scanf_s("%d", &num1); scanf_s("%d", &num2); result = num1 + num2; printf("\n > %d", result); } } return 0; } 
+0

Non, 'scanf' réellement _did_ fonctionne et lit la nouvelle ligne envoyée en appuyant sur 'Entrée'. Pourquoi ne pas simplement vérifier le contenu de 'ch' après avoir lu? – ForceBru

+1

try scanf_s ("% c", & ch, 1); – Robert

+0

Quel compilateur utilisez-vous qui n'a pas généré d'avertissement pour 'scanf_s ("% c ", &ch);'? – chux

Répondre

0

essayez ceci: J'ai changé scanf_s() à Scanf et a donné l'espace à% c en tant que prescripteur de conversion% c ne sautera pas automatiquement les principaux espaces, donc s'il y a un saut de ligne parasite dans le flux d'entrée (à partir une entrée précédente, par exemple) l'appel scanf le consommera immédiatement.

#include <stdio.h> 
int main() { 
int a, result; 
// ***************** Menu ******************* 
printf("Hello !!! \n The Operations That This Calculator Can Do :"); 
printf("\n1. Simple Operations"); 
printf("\n2. Calculate The Biggest Number"); 
printf("\n3. Taylor expansion"); 
printf("\n4. Sum Digits Of a Number"); 
printf("\n5. Found The Prime Numbers Before The Number That You Entered"); 
printf("\nEnter The Number Of Operation That You Want : "); 
scanf("%d", &a); 
if (a == 1){ 
char ch; 
int num1, num2; 
printf("\n Please Enter Your Operation Like That (- 5 3) : "); 
scanf(" %c", &ch); 
if (ch == '-'){ scanf(" %d", &num1); scanf(" %d", &num2); result = num1 - 
num2; printf("\n > %d", result); } 
if (ch == '+'){ scanf(" %d", &num1); scanf(" %d", &num2); result = num1 + 
num2; printf("\n > %d", result); } } 
system("pause"); } 
+0

Cette réponse change aussi tranquillement 'scanf_s()' en 'scanf()'. Une différence critique avec '% c' . – chux