我试图理解这个代码,用于计算第一个和后面的语法集。在这个scanf
已被用于多个输入
scanf("%s%c",a[i],&ch);
其中a
是2D数组,ch
是char。有人能解释一下这条线的含义吗?
正如在评论中所说,scanf("%s%c",a[i],&ch);
尝试在a[i]
中读取一个'word'作为字符串,并在ch中读取一个字符串
因为'word'以分隔符结束,并且%s和%c之间没有空格如果读取字符以设置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”之后的第一个空格
当然是在azeenter的情况下
pi@raspberrypi:/tmp $ ./a.out
aze
2
'aze' '
' (10)
ch得到换行符
不冒险写出字符串的正确方法是设置最大字符数,在我的例子中,scanf("%9s%c", s, &ch)
(9而不是10,以便为空字符结束字符串的位置)
如果可用的'单词'至少有10个字符,则第10个字符将由ch得到:
pi@raspberrypi:/tmp $ gcc s.c
pi@raspberrypi:/tmp $ ./a.out
1234567890
2
'123456789' '0' (48)
在%s和%c之间添加空格会更改行为,因为分隔符在“word”和返回的字符之间跳过,例如:
#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