1

我正在尝试将用户输入流中的值分配给变量 M 和 N。如果我指定 int 类型的 M 和 N,我可以让我的代码工作。但是,当我使用 stdint.h 将它们指定为 int16_t 时,它将读取第一个值,但不会读取最后一个值。为什么是这样?

这里的代码工作得很好......

#include <stdio.h>
#include <stdint.h>
int main(void)
{
    char str[10];
    int M, N;
    fgets(str, 10, stdin);
    sscanf(str, "%d%d", &M, &N);
    printf("M is: %d\n", M);
    printf("N is: %d\n", N);
    return 0;
}

在这里它不起作用。

#include <stdio.h>
#include <stdint.h>
int main(void)
{
    char str[10];
    int16_t M, N;
    fgets(str, 10, stdin);
    sscanf(str, "%d%d", &M, &N);
    printf("M is: %d\n", M);
    printf("N is: %d\n", N);
    return 0;
}
4

1 回答 1

7

您对 int16_t 类型使用了错误的说明符,因此行为未定义。

在 scanf 中使用时 int16_t 的正确说明符是 SCNd16:

sscanf(str, "%"SCNd16" %"SCNd16, &M, &N);

printf 的说明符是 PRId16。它的用法是一样的。

于 2016-11-07T19:04:27.087 回答