在一个字母后扫描一个整数

Scan an int after a letter

我正在构建一个程序,遇到了一个小问题,但找不到解决方案。 所以我的目标是扫描某个字母,当扫描发生时,我只得到它前面的数字。这是代码:

#include <stdio.h>

int main(){

    int pag = 1;
    char *op = malloc(sizeof(char));
    char* opt = malloc(sizeof(char));
            
    printf("P      -> Next\n");
    printf("A      -> Back\n");
    printf("S <N>  -> Jump to N\n");
    printf("B      -> Sair\n");
    printf("\n");

    printf("Insert option: ");
    fgets(op, 4, stdin);
        
    if(op[0] == 'S'){
        
        opt = strsep(&op, " ");
            
        pag = atoi(op);     
    }

    printf("Page: %d\n", pag);

    free(op);
    free(opt);
}

例如,当我执行程序并选择选项“S 5”时,我的目标是获得“5”。问题是当我选择了一个多于 2 位数的数字时,例如,“S 12”给我的数字是“1”,而不是数字 12,我不知道是内存分配问题还是其他问题.

第一个:

char *op = malloc(sizeof(char));
char* opt = malloc(sizeof(char));

不会分配超过 1 个字节来存储您的输入字符串。

fgets(op, 4, stdin);

不会为以下字符串“S 12”读取足够的字符,因为长度参数值包括字符串空终止符。

尝试:

const int length= 5;
char *op = malloc(length);
char* opt = malloc(length);

fgets(op, length, stdin);