我试图理解此代码,以便首先计算和遵循语法集。
在此scanf
已用于多个输入
scanf("%s%c",a[i],&ch);
其中a
是2D数组,ch
是字符。有人可以解释这行的意思吗?
答案 0 :(得分:2)
正如评论scanf("%s%c",a[i],&ch);
所述,请尝试在a[i]
中将'单词'读取为字符串,在 ch
因为“单词”以分隔符结尾,并且如果读取字符以设置 ch <,则%s 和%c 之间没有空格。 / em>该字符是第一个分隔符
示例:
#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”之后的第一个空格
当然,对于 aze enter
pi@raspberrypi:/tmp $ ./a.out
aze
2
'aze' '
' (10)
ch 获取换行符
不冒任何风险写出字符串的正确方法是设置最大字符数,在我的示例中,scanf("%9s%c", s, &ch)
以上(9而不是10可以使空字符以空格结尾)字符串)
如果可用的“单词”至少包含10个字符,则通过 ch 获得第10个字符:
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