2016-12-31 6 views
-5

こんにちは私はどのようにユーザーを制限し、文字列または文字のみを入力するかについての質問をしたいと思っています。整数を入力するユーザーを制限しますか?

あなたが答えを知っていれば私のコードでそれを適合させることができますそれ以下では日付部分を忘れてしまったら素晴らしいと思います。有効な整数を入力し、ユーザを強制する

void checkin() 
{ 
char comp_choice,more_choice,in_comp_choice; 
int comp_amount; 
int date_month[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 
int date_month1[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 
int charges_per_room_per_day = 5000,bill; 
struct info user; 
system("cls"); 
printf("\t\tCHECK IN FORM\n"); 
printf("Please Fill Following Information\n"); 
FILE *fp; 
fp = fopen("checkin.txt","a"); 
time_t t; 
time(&t); 
    printf("First Name : "); 
    fflush(stdin); 
gets(user.first_name); 
printf("Last Name : "); 
    fflush(stdin); 
    gets(user.last_name); 
fflush(stdin); 
printf("Contact Number : "); 
gets(user.contact_no); 
fflush(stdin); 
printf("\nGuests : "); 
scanf("%d",&user.guest); 
printf("Rooms : "); 
scanf("%d",&user.rooms); 
fprintf(fp,"%s %s %s %d %d\n",user.first_name,user.last_name,user.contact_no,user.guest,user.rooms); 
Label2: 
printf("Today date and time is %s\n",ctime(&t)); 
printf("Check In date (DD-MM-YYYY) : "); 
scanf("%d %d %d",&user.date,&user.month,&user.year); 
printf("Check out date (DD-MM-YYYY) : "); 
scanf("%d %d %d",&user.date1,&user.month1,&user.year1); 

This Is Image of i am entering Integers And Program Doesn't Say Any Thing

+5

呼び出す 'にfflush(STDIN)'未定義の動作を呼び出します。 – emlai

+6

'gets()'は悪いですが、代わりに 'fgets()'を使います。 – alk

+0

私はfflush(stdin)を削除しますが、何も起こりません同じことが入力整数になる –

答えて

0

方法は、ユーザが(例えばchar[..] -bufferに)進入し、その後必要に応じて結果を確認/解釈するためにどのように読み取ることです。このチェックでは、カスタムロジックを記述するか、たとえばstrolのような組み込み関数のロジックを使用することができます。

次のサンプルでは、​​strtolが使用されています。 strtolの署名はlong int strtol(const char *nptr, char **endptr, int base)です。基本的には、スキャンが成功した後、endptrは、(正常に)スキャンされた番号の後に、nptrの最初の文字を指します。 (有効な)番号の後に文字を受け入れない場合は、endptrが実際に文字列ターミネータを指しているかどうかを確認します'\0';失敗したスキャンの場合、endptrnptrに等しくなります。ここで

あなたが行く:

#include <stdio.h> 
#include <stdlib.h> 

int enterIntegerValue(const char *message) { 
    char inputBuffer[21]; 
    char *endOfScan; 
    bool error; 
    int result; 
    do { 
     printf("%s", message); 
     scanf("%20s", inputBuffer); 
     result = (int)strtol(inputBuffer,&endOfScan,10); 
     error = (endOfScan == inputBuffer) || (*endOfScan != '\0'); 
     if (error) 
      printf("Invalid number. Please enter a valid integer number."); 
    } 
    while (error); 

    return result; 
} 

int main() 
{ 
    int rooms = enterIntegerValue("Rooms : "); 
    printf("input: %d", rooms); 
    return 0; 
} 
関連する問題