有人可以解释这个scanf代码的含义吗

Can someone explain the meaning of this scanf code

我正在尝试理解这段用于先计算并遵循语法集的代码。 在此 scanf 已与多个输入一起使用

scanf("%s%c",a[i],&ch);

其中 a 是二维数组,ch 是字符。有人可以解释这一行的含义吗?

如评论中所说 scanf("%s%c",a[i],&ch); 尝试将 'word' 读取为 a[i] 中的字符串和 ch[=19 中的字符=]

因为一个'word'以分隔符结束,%s%c[=60之间没有space =] 如果读取一个字符设置 ch 该字符是第一个分隔符

示例:

#include <stdio.h>

int main()
{
  char s[10], ch;
  printf("%d\n", scanf("%s%c", s, &ch));
  printf("'%s' '%c' (%d)\n", s, ch, ch);
}

编译与执行:

pi@raspberrypi:/tmp $ gcc s.c
pi@raspberrypi:/tmp $ ./a.out
aze q
2
'aze' ' ' (32)

所以ch没有得到q而是"aze"

之后的第一个space

当然是在azeenter

的情况下
pi@raspberrypi:/tmp $ ./a.out
aze
2
'aze' '
' (10)

ch 获取 newline


不冒险写出字符串的正确方法是设置最大字符数,在我上面的示例中 scanf("%9s%c", s, &ch)(9 而不是 10 来放置空字符结束字符串)

如果可用 'word' 至少有 10 个字符,第 10 个字符将由 ch 获取:

pi@raspberrypi:/tmp $ gcc s.c
pi@raspberrypi:/tmp $ ./a.out
1234567890
2
'123456789' '0' (48)

%s%c 之间添加 space 会改变行为,因为分隔符在 [= 之间跳过76=] 和返回的字符,例如:

#include <stdio.h>

int main()
{
  char s[10], ch;
  printf("%d\n", scanf("%9s %c", s, &ch));
  printf("'%s' '%c' (%d)\n", s, ch, ch);
}

编译与执行:

pi@raspberrypi:/tmp $ gcc s.c
pi@raspberrypi:/tmp $ ./a.out
aze    q
2
'aze' 'q' (113)

所以时间 ch 得到 q