2017-11-04 17 views
-3

私のプログラムでは、入力を取って制御するための関数が1つしかありません。私は、ユーザーがa、-11を押すと、プログラムが終了しないことを意味します。ユーザーが-1を押さなかった場合にのみ、入力を確認して関数 "input"を繰り返すにはどうすればよいですか?スイッチ内の関数を呼び出す

void input (double *l1){ 
double temp1=0; 
printf("\nInsert the first value: "); 
while (scanf("%lf",&temp1) != 1){ 
    printf("Reinsert the first value: "); 
    while (getchar() != '\n'); 
} 

そして、これがメインです:

int main(){ 
    int flag,num; 
    double a; 
    do{ 
     switch(flag){ 
      default: 
       input(&a); 
       printf("PRESS -1 TO QUIT: "); 
       scanf("%d",&flag); 
       if (flag != -1) { 
        num=1; 
       } 
       else num=0; 
       break; 
     } 
    }while(num != 0); 
    printf("\nTHANK YOU!"); 
} 

今I'have唯一の問題は、私は(例:A、B、AA)の任意の文字を押すと、-1の代わりに、その値を関数の入力で使用されていますが、私は望んでいません! 私は、-1を押すと、他のケース(キャラクタまたは他の数字)のプログラムから-1を終了し、メインコールを入力としたいと思っています。どうすればいいですか?

+0

ユーザーはキーボードからどのように '-1'を入力しますか? '' - ''は 'char'とみなされるので、入力を取っている間にそれを考慮する必要があります。 '-1'を入力すると' int'変数に '-1'が格納されません。 – ameyCU

+0

なぜ 'case'もなく' default: '...'スイッチ 'を持っていますか?それは**役に立たないです!! –

+0

'printf'の最後に' \ n'を置きます。すべての警告とデバッグ情報でコンパイルします( 'gcc -Wall -Wextra -g')。 **デバッガ 'gdb'を使用する** –

答えて

0

入力にfgetsを使用し、入力から値を解析することを検討してください。

#include <stdio.h> 
#include <string.h> 

int getdouble (double *l1){ 
    char line[100] = ""; 
    printf("\nInsert a double: "); 
    fflush (stdout); 
    while (fgets (line, sizeof line, stdin)) { 
     if (0 == strcmp (line, "-1\n")) { 
      return 2; 
     } 
     if (1 != sscanf(line, "%lf",l1)) { 
      printf("Try again: "); 
      fflush (stdout); 
     } 
     else { 
      return 1; 
     } 
    } 
    return 0; 
} 

int main(void){ 
    int flag,num; 
    double a; 
    do{ 
     switch(flag){ 
      default: 
       printf("PRESS -1 TO QUIT: "); 
       num = getdouble(&a); 
       break; 
     } 
    }while(num == 1); 
    printf("\nTHANK YOU!"); 
} 
関連する問題