c - 限制用户输入整数?

标签 c

您好,我想问一个关于如何限制用户输入整数并仅输入字符串或字符的问题。

如果您知道答案,您可以将其放入下面的我的代码中吗?如果您这样做,那就太好了,顺便说一句,忘记日期部分只是另一件事。

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

最佳答案

强制用户输入有效整数的一种方法是读入用户输入的任何内容(例如读入 char[..]-buffer),然后将结果解释/检查为必需的。对于此检查,您可以编写自定义逻辑,或使用内置函数的逻辑,例如 strol

以下示例使用了strtolstrtol 的签名为 long int strtol(const char *nptr, char **endptr, int base)。基本上,成功扫描后,endptr将指向(成功)扫描的数字之后的nptr的第一个字符;如果我们不接受(有效)数字后面的任何字符,我们会检查 endptr 是否实际上指向字符串终止符 '\0';如果扫描不成功,endptr 等于 nptr

给你:

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

关于c - 限制用户输入整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407901/

相关文章:

c - 结构实现

C - 字符串递归

c - 为什么 sizeof 在 C 中对同一个字符串返回不同的值?

c - 如何使用特定的定界符进行自动换行,而不进行动态分配

c - UINT32_C 和 uint32_t 的区别

c - GTK "callbacks"必须是静态函数吗?

c - FCTRL-Spoj,SIGSEGV

c - 自动为执行的程序提供输入

c - 执行c程序时显示"Abnormal program termination"

c - 如何在没有数组的情况下旋转数字的 n 位?