-3

私はCにかなり慣れていないので、このようなスイッチのオプション番号としてint配列を使用しようとしています

void totalEntered(float * total, float * inputFigure)
{
    *total = *total + *inputFigure;
}

int main()
{
    float amountEntered = 0.00;
    float tot = 0.00;
    int option_numbers[3] = {1,2,3,4};
    float a_food = 0.00;
    float a_tab = 0.00;
    float a_trav = 0.00;
    float a_bill = 0.00;

    totalEntered(&tot, &amountEntered);



    printf("Please enter option number from below \n1.food\n2.tabacco\n3.travel\n4.bills\n");
    scanf("%i", option_numbers);
    switch(option_numbers)
    {
    case 1:
        printf("Please Enter an amount: ");
        scanf("%f", amountEntered);
        a_food = a_food + amountEntered;
        totalEntered(&tot, &amountEntered);
        printf("You have spent %f on food", a_food);
        break;
    case 2: /*ignore below haven't finish that*/
        a_tab = a_tab + amountEntered;
        printf("You have spent %.2f on tabacco", a_tab);
        break;
    case 3:
        a_trav = a_trav + amountEntered;
        printf("You have spent %.2f on travel", a_trav);
        break;
    case 4:
        a_bill = a_bill + amountEntered;
        printf("You have spent %.2f on travel", a_bill);
        break;
    default:
        printf("You have not input a category!");
        break;
    }
    return 0;


}

誰でもこれについてどうすればよいかアドバイスできますか...私は少し立ち往生しています! :DI は、ユーザーがオプション 1 を選択してから量を選択する必要がある食品の下に量を入力したい場合に == である数値をユーザーに選択させようとしています。これが以前よりも理にかなっていることを願っています! ありがとう

4

4 に答える 4

5

switch()配列内の要素の 1 つを渡す必要がある場合、配列を渡すことはできません。

int item = 2; // or whatever

switch(option_numbers[item])
{

編集:
あなたのコメントに基づいて、ユーザー入力を取り、4つのオプションのいずれかを選択させたい場合、それは非常に簡単です。配列はまったく必要ありません。

int selection = -1;
printf("Which option do you want? (1-4): ");
scanf("%d", &selection);

switch(selection)
{

サイドノート:

int option_numbers[3] = {1,2,3,4}; // that's not size 3, it's got 4 elements should 
                                   // have been:
                                   // int option_numbers[4] = {1,2,3,4}; 
于 2013-03-13T16:37:00.943 に答える
2

あなたの質問は不明確なので、私はあなたが尋ねようとしていると思うものに答えます。まず、switch ステートメントを使用するより良い方法は、列挙型を使用することです。私は説明が苦手なので、ここにコード例を示します: (ここにリンクがあります: How to define an enumerated type (enum) in C? )

typedef enum { Food, Tobacco, Travel, Bills } Options;

おおよそ(非常に、非常に大まかに)次と同等です。

int Food = 0;
int Tobacco = 1;
int Travel = 3;
int Bills = 4;

switch ステートメントでそれを使用する非常に簡単な方法は次のとおりです。

main() の前のどこか:

typedef enum { Food, Tobacco, Travel, Bills } Options;

そしてあなたのmain()で:

Options myOption; // just as an example
printf("Pick your expense thingy (0, 1, 2, 3): ");
scanf("%d", &myOption);

switch (myOption) { // Now remember that Food = 0, Tobacco = 1 ...
    case Food: // food == 0
        // do food stuff
        break;

    case Tobacco:
        // do Tobacco stuff
        break;

    case Travel:
        // do Travel stuff
        break;

    case Bills:
        // do Bills stuff
        break;
}

--- 編集 --- (2013 年 3 月 14 日 ... うわー、今日は円周率の日です!)

わかりました、今朝コンピューターの電源を入れたときに思いついた別の方法があります...文字は変装して1バイトの数字にすぎないという事実を利用できます;) ...そうでないのでより良いです' scanf に頼らないでください (scanf はあまり好きではありません 笑):

char input;

printf("Pick your expense thingy (_f_ood, _t_obacco, t_r_avel, _b_ills): ");
input = getchar(); // this function just gets a char off of stdin and returns it

switch(input) {
    case 'f': case 'F': // note the single quotes, this tells the compiler that it is a single character and not a null terminated string
        // do food stuff
        break;

    case 't': case 'T': // we use both letters so that our comparisons are case-insensitive
        // do tobacco stuff
        break;

    case 'r': case 'R': // use r for travel because its the easiest way to differentiate the input
        // do travel stuff
        break;

    case 'b': case 'B': // so yeah...
        // do bills stuff
        break;

    default:
        printf("That was not a valid option :(");
}
于 2013-03-13T16:51:03.787 に答える
0
int option_numbers[] = {1,2,3,4};
int i;

for (i = 0; i < sizeof(option_numbers)/sizeof(int); ++i)
{
    switch(option_numbers[i])
    {
        ....
    }
}

インデックスの上限は必要に応じて変更できます。

于 2013-03-13T16:44:40.047 に答える
0

すべての数値を含む数値の配列をオンにしようとしています。特定の番号が割り当てられた int 変数で切り替えを行う必要があります。

于 2013-03-13T16:37:10.303 に答える