2011-11-10 10 views
0
#include <stdio.h> 
#include <stdlib.h> 


struct time{int hours, mins, secs;}; 

int main(int argc, char *argv[]) 
{ 


printf("\nplease enter the time in 24 hr format, \nenter the hours, return,\nenter minutes, return, enter seconds, and return.\n"); 
struct time one; 
scanf("%d\n%d\n%d", &one.hours, &one.mins, &one.secs); 
printf("retfal1"); 
int yn; 

yn = validateTime(one, yn); 
while(!yn){ 

      printf("\nerror, please enter the time in 24 hr format, \nenter the hours, return,\nenter minutes, return, enter seconds, and return.\n"); 
     scanf("%d\n%d\n%d", &one.hours, &one.mins, &one.secs); 
     validateTime(one); 

     if (!yn){ 
      puts("Invalid input\nPlease try again"); 
     printf("\nplease enter the time in 24 hr format, \nenter the hours, return,\nenter minutes, return, enter seconds, and return.\n"); 
     scanf("%d\n%d\n%d", &one.hours, &one.mins, &one.secs); 
     validateTime(one); 
     } 
     else{ 
     printf ("Time entered was; %d:%d:%d", one.hours, one.mins, one.secs); 


     } 
     } 

     printf ("the time entered ws; %d:%d:%d", one.hours, one.mins, one.secs); 

    getch(); 
    return 0; 
} 


int validateTime(struct time tme, int yn) 
{ 

if (tme.hours < 0 || tme.hours > 23 || tme.mins > 59 || tme.mins < 0 || tme.secs < 0 || tme.secs > 59) 
{ 
       printf("retfal4"); 
    yn = 0; 
    return yn; 
    } 
else { 
    printf("rettru"); 
    yn = 1; 
    return yn; 

    } 
} 

このプログラムは、最初の試行で無効な入力が得られた場合、時間、分、秒を取り込み、検証して印刷します再び摂取を促し、時間を確認してください。検証は問題を引き起こしていますが、最初のエントリで正しく検証されますが、間違った時間を入力すると無効な出力と次の入力を促しますが、正しい/有効な入力でも別の無効な入力プロンプトが表示されます。私はこれをあまりにも長い間見てきましたが、私は何らかの段階で何か愚かなことをしたことが分かりましたが、それを見つけることはできません。どんな助けも非常に高く評価されるでしょう。検証機能の第2サイクルは正しく検証されません

答えて

0

あなたは、ループの前に、一度だけynを割り当てます。ループの内部でvalidateTime()を再度呼び出しますが、結果は評価されません。結果として、ynがfalseに設定されると、決してリセットされません。

0

は、私はあなたの検証関数に変数ynを渡している理由はわかりません。ちょうど良い0または1を返す必要があります。あなたの問題を解決できないかもしれません。

あなたの問題は、あなたのループ内であなたの検証機能を呼び出した結果にynを設定していないことです。

0

あなたは、あなたがそれを呼び出す最初の時間を行うようにあなたはynvalidateTimeの結果を格納していません。

私はまた、あなたがそれに渡された変数を更新することができますので、それ以外の場合は、引数として余分intを取るために意味をなさない、validateTimeint *ynに取りたいかもしれないと思います。私は単にその引数を削除し、戻り値を格納します。

これは宿題であるように、私はあなたのためにあなたのコードを変更したいが、選択肢を示唆していません。

関連する問題