Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在变量上使用fgetc(stdin)之后,如何将输入传递给strtol?_C_Strtol - Fatal编程技术网

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

在变量上使用fgetc(stdin)之后,如何将输入传递给strtol?,c,strtol,C,Strtol,我有一个变量,用户在其中输入一个数字。该变量的类型为int,因为这是fgetc(stdin)和getchar()的返回值。在本例中,我使用的是fgetc(stdin)。用户输入数字后,我想用strtol()将其转换为整数,但是,由于strtol()的第一个参数是const char*,因此我收到一条关于整数到指针转换不兼容的警告。代码如下: int option; char *endptr; int8_t choice; printf("=======================

我有一个变量,用户在其中输入一个数字。该变量的类型为
int
,因为这是
fgetc(stdin)
getchar()
的返回值。在本例中,我使用的是
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
用于将“字符串”转换为
长的
,而不是单个字符。您只需
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”


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

Oh ok。谢谢我会去做的。但假设我确实想将其转换为
int
,是否可能不得到任何警告?警告存在是因为它是错误的,并且您的代码无法工作。但是是的,请看我的编辑