有人可以解释这个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
我正在尝试理解这段用于先计算并遵循语法集的代码。
在此 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