在变量上使用 fgetc(stdin) 后,如何将输入传递给 strtol?

After using fgetc(stdin) on a variable, how do I pass the input to strtol?

我有一个变量,用户可以在其中输入一个数字。该变量的类型为 int,因为这是 fgetc(stdin)getchar() 的 return 值。在这种情况下,我使用 fgetc(stdin)。用户输入数字后,我想用 strtol() 将其转换为整数,但是,由于 strtol() 的第一个参数是 const char *。这是代码:

int option;
char *endptr;
int8_t choice;

printf("=========================================Login or Create Account=========================================\n\n");
while(1) {
    printf("Welcome to the Bank management program! Would you like to 1. Create Account or 2. Login?\n>>> ");
    fflush(stdout);
    option = fgetc(stdin);
    choice = strtol(option, &endptr, 10);

有谁知道如何解决这个问题?

strtol 用于将“字符串”转换为 long,而不是单个字符。您只需要 choice = option - '0' 即可获得该值。但是实际上不需要转换,因为可以直接在char值上切换

switch (option)
{
    case '1':
        // ...
        break;
    case '2':
        // ...
        break;
}

如果你真的想调用strtol那么你必须做一个字符串

char[2] str;
str[0] = option;
str[1] = 0; // null terminator
choice = strtol(str, &endptr, 10);

既然变量'option'已经是一个整数,就没有理由再调用'strtol'了。

或者你可以使用gets从stdin获取一个缓冲区,然后通过strtol将缓冲区转换为整数。