2013-03-21 6 views
0

난 그냥 문자열 또는 정수 입력을 허용 할,하지만 난 그것을 알아낼 수없는 것, 이것은 내가 switch 문에서 사용할 수 있도록이 변수를 어떻게 비교할 수 있습니까?

#include <string.h> 
#include <stdio.h> 
#include <limits.h> 
#include <ctype.h> 
#include <stdlib.h> 
#define maxL 9182 

int main() { 
    char menuOption; 
    char cmd[10]; 

// DECLARE FUNCTIONS TO BE USED IN MENU 


    float circle() { 
     float numbers; 
     float calcFloat; 


     printf("\n\nYou've selected a circle!\n\n"); 
     printf("Enter in a value between 1.00 and 1000.00: "); 
     scanf("%f%*c",&calcFloat); 
     printf("You've entered %f\n", calcFloat); 

     numbers = 2*calcFloat*3.14159; 

     printf("The circumference of your circle is: %f\n\n\n", numbers); 

    } 

    float sphere() { 
     float sphere; 
     float calcSphere; 


     printf("\n\nYou've selected a sphere!\n\n"); 
     printf("Enter in a value between 10.5 and 1024.00: "); 
     scanf("%f%*c",&calcSphere); 
     printf("You've entered %f\n", calcSphere); 

     sphere = (4/3)*calcSphere*calcSphere*calcSphere*3.14159; 

     printf("The volume of a sphere with your value is: %.2f\n\n\n", sphere); 

    } 

    char checkInput(char input) { 

     if ((strcmp(input, "0") == 0) || (strcmp(input, "zero") == 0)) { 
     return 0; 
     } 
    } 

// END OF FUNCTIONS 


// CREATE AND SHOW MENU AND RECEIVE INPUT TO DIRECT TO PROPPER FUNCTION. 


    for (;;) { 

     printf("Menu: \n" 
     "(0)Circle\n" 
     "(1)Sphere\n" 
     "(2)Palindrome\n" 
     "(3)Shuffle\n" 
     "(4)Quit\n"); 

     printf("Select your choice!: "); 
     scanf("%c", cmd);   

     switch (checkInput(tolower(cmd))) { 

      case 0: 
       circle(); 
      break; 

      case 1: 
       sphere(); 
      break; 
     } 
    } 

// END OF SWITCH STATEMENT AND MENU 
} 

내가에 명 중 0을 입력 제로 있도록하려면 .. 지금까지 무엇을 가지고 scanf 사용자 오류를 줄이기 위해 감사합니다!

+0

'scanf' 대신'getline'을 쓰고 o를 쓰십시오. '0'과 '0'을 모두 파싱하는 코드 - 바보 같다고 생각합니다. –

+0

@BasileStarynkevitch하지만이 학교 프로젝트에 대한 제한이 있습니다. – Datsik

+0

과제 나 프로젝트에서 과목을 위해서만 필요하지 않은 기능을 사용해야하는 경우 싫습니다. –

답변

0

당신은 변수 cmd로 문자열을 받고 있습니다이

int checkInput(char* input) { 
    int i = 0; 
    while (i < strlen(input)) 
    input[i] = tolower(input[i]); 

    if ((strcmp(input, "0") == 0) || (strcmp(input, "zero") == 0)) { 
    return 0; 
    } else if ((strcmp(input, "1") == 0) || (strcmp(input, "one") == 0)) { 
    return 1; 
    } 
    return 4; // Quit Option 
} 

추천하고이

switch (checkInput(cmd)) { 

    case 0: 
     circle(); 
    break; 

    case 1: 
     sphere(); 
    break; 
} 

처럼 main 호출기능. 이 char cmd[10];

+0

나는 이것을 시도했다. 그러나 나는 2 행의 오류를 얻는다. 하나는 50 행, checkInput의 if 문, switch (check) 행의 하나는 모두 'tolower '의 인수 1을 전달한다. 'strcmp'는 캐스트가없는 정수에서 포인터를 만듭니다 [기본값으로 활성화 됨]' 왜 그런가?원래 게시물에서 업데이트 된 코드 확인 – Datsik

+0

tolower 함수의 인수는 문자입니다. char 배열에 대한 포인터가 아닙니다. ZERO를 0으로 변환하려면 각 문자와 함께 tolower 함수를 호출해야합니다. 알았다?? – 999k

+0

아니요 예가 필요합니다. – Datsik

1

getline 함수를 사용하면 cmd에 문자열을 저장할 수 있습니다.

그런 다음 strcmp

if ((strcmp(cmd, "0") == 0) || (strcmp(cmd, "zero") == 0)) { 
    circle(); 
} else if ((strcmp(cmd, "1") == 0) || (strcmp(cmd, "one") == 0)) { 
    sphere(); 
} 
하여 문자열을 비교할 수 있습니다
+0

제가 말씀 드렸어야했는데,이 학교 프로젝트에 switch 문을 사용해야합니다 :/ – Datsik

+0

위 코드는 주 코드가 아닌 checkInput 함수에서 사용할 수 있으며 현재 주 코드를 계속 사용합니다. 어쨌든'switch '는 C의 문자열에 사용할 수 없다. checkInput은'char *'를 입력으로 받아 들일 필요가있다. – Fabien

0
난 그냥 문자열 또는 정수 입력하는 가장 좋은 방법은 입력

을 확인하기 위해 정규 표현식을 사용하는 것입니다

허용 할

#include <regex.h> 

    regex_t checkInteger; 
    regex_t checkFloat; 

    bool isInteger = false; 
    bool isFloat = false 

    int reti; 
    char input[100]; 

    // read input from user 

    regcomp(&checkInteger, "^[1-9][0-9]*$", 0); 
    regcomp(&checkFloat, "^[1-9][0-9]*\.[0-9]+$", 0); 

    isInteger = !regexec(&checkInteger, input, 0, NULL, 0); 
    isFloat = !regexec(&checkFloat, input, 0, NULL, 0); 

    if (isInteger) 
    { 
      // input is integer 
    } 
    else if (isFloat) 
    { 
      // input is float 
    } 

    regfree(&checkInteger); 
    regfree(&checkFloat); 
0

solution1 같은 문자 배열로 선언 : 문자열

case "0": 

정수로

int cmd; // declare cmd as atring 




printf("Select your choice!: "); 
    scanf("%d", &cmd); 

switch (cmd) { 

      case 0: 
       circle(); 
---- 
0

가 그 다음, NUL 종료 문자열, cmd

를 입력 읽기 로
switch (((strcmp(cmd, "0") == 0) || (strcmp(cmd, "zero") == 0)) + 
     ((strcmp(cmd, "1") == 0) || (strcmp(cmd, "one") == 0)) * 2) 
{ 
case 1: 
    circle(); 
    break; 
case 2: 
    sphere(); 
    break; 
default: 
    // handle the error 
    break; 
} 
관련 문제