2014-09-14 3 views
2

scanf_s()에 문제가 있습니다. 함수 또는 스위치 함수, 내가 올바른 코드를 인식하지 못하고 처음에 다시 루프를 내 코드를 실행하지만, 그 후 잘 작동합니다. 그것은 간단한 계산기입니다.scanf_s를 가져올 수 없거나 스위치가 작동하지 않습니다.

방금 ​​프로그래밍 학습을 시작한 이래로 몇 가지 쉬운 해결책이 있을지 모르지만 찾을 수 없습니다.

모든 텍스트는 핀란드어로되어 있지만 코드 자체가 이해되기를 바랍니다.

내가해야 할 것과해야하지 말아야 할 것을 배우기를 열망하기 때문에 모든 의견을 환영합니다.

#include <stdio.h> 
#include <stdlib.h> 

float luku1 = 0; 
float luku2 = 0; 
float tulos = 0; 
char valinta = '\0'; 

int main() 
{ 
    system("cls"); 
    printf("Minkä laskusuorituksen haluaisit tehdä? (+,-,*,/)\n"); 
    fflush(stdin); 
    scanf_s("%c", &valinta); 
    switch (valinta){ 
    case '+': 
     printf("Anna yhteenlaskettavat luvut.\n>"); 
     scanf_s("%f %f", &luku1, &luku2); 
     tulos = luku1 + luku2; 
     printf("Lukujen summa on %4.2f\n", tulos); 
     break; 
    case '-': 
     printf("Anna vähennettävät luvut.\n>"); 
     scanf_s("%f %f", &luku1, &luku2); 
     tulos = luku1 - luku2; 
     printf("Lukujen summa on %4.2f\n", tulos); 
     break; 
    case '*': 
     printf("Anna kerrottavat luvut.\n>"); 
     scanf_s("%f %f", &luku1, &luku2); 
     tulos = luku1 * luku2; 
     printf("Lukujen tulo on %4.2f\n", tulos); 
     break; 
    case '/': 
     printf("Anna jaettavat luvut.\n>"); 
     scanf_s("%f %f", &luku1, &luku2); 
     if (luku2 == 0) 
     { 
      printf("Nollalla ei voida jakaa.\n"); 
      system("pause"); 
      main(); 
     } 
     else 
     { 
      tulos = luku1/luku2; 
      printf("Lukujen jako on %4.2f\n", tulos); 
     } 
     break; 
    default: 
     printf("En tunnistanut laskutoimitusta, yritä uudelleen.\n"); 
     system("pause"); 
     main(); 
     break; 
    } 
} 
+1

디버거 사용 방법을 익히십시오. –

+1

'scanf()'에서 얻은 반환 값을 사용 [scanf_s()와 같은 비표준 함수는 사용하지 마십시오.] – wildplasser

+0

디버깅하는 동안 scanf_s 다음에 입력과 상관없이 직접 대문자가됩니다. – Suff0cat1on

답변

0

scanf_s("%c", &valinta);에는 다른 매개 변수가 필요합니다.

scanf_s(" %c", &valinta, 1); 

@mafso 다시 scanf_s(" %c", &valinta); 전화 코드를해야 도움이 될 것입니다 "%c" 앞에 공백을 추가.

는 "fscanf_s 함수는이 C, S, 그리고 [(할당 억제는 *로 표시되지 않는) 변환 지정자 인수의 쌍에 적용한다. 이들 인자 중 첫 번째는 동일한 것을 제외 fscanf 동등 그 인수는 바로 뒤에 형식의 rsize_t 있고 쌍의 첫 번째 인수에 의해 가리키는 배열의 요소 수를 제공하는 두 번째 인수에 의해 인수 목록에 있습니다. "

C11dr §K.3.5.3.2 4


는 비 이식으로 fflush(stdin);을 떨어 뜨리고 추천 예상대로/작동하지 않을 수 있습니다.

+2

이것은 정확 합니다만,'scanf_s'를 전혀 사용하지 않는 것이 좋습니다. –

+0

@R ..'scanf_s()'에 동의해라 - 나는 모든 사용자 입력에 대해'fgets()'를 선호한다. – chux

+0

고맙습니다. 나는 그 동안 꽤 오래 힘들었습니다. – Suff0cat1on

관련 문제