0

文字列または整数の入力を許可したいのですが、理解できないようです。これが私がこれまでに持っているものです。

#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
}

scanfユーザーエラーを減らすために、0または0のいずれかを入力できるようにします。ありがとうございます。

4

5 に答える 5

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();
}
于 2013-03-21T06:52:17.463 に答える
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);
于 2013-03-21T07:00:40.613 に答える
0

checkInputこのように関数を変更します

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
}

そして、mainこのようなあなたの呼び出しで

switch (checkInput(cmd)) {

    case 0:
        circle();
    break;

    case 1:
        sphere();
    break;
}

変数に文字列を受け入れていますcmd。このような文字配列として宣言しますchar cmd[10];

于 2013-03-21T07:01:00.187 に答える
0

solution1:文字列として

case "0":

整数として

int cmd; // declare cmd as atring




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

switch (cmd) {

            case 0:
                circle();
----
于 2013-03-21T07:01:10.063 に答える
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;
}
于 2013-03-21T07:04:29.547 に答える