gpt4 book ai didi

谁能解释一下这个scanf代码的含义

转载 作者:行者123 更新时间:2023-11-30 21:46:06 25 4
gpt4 key购买 nike

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

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

哪里a是二维数组并且 ch是一个字符。有人能解释一下这行的含义吗?

最佳答案

如备注中所述 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输入

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 之间添加空格会更改行为,因为分隔符会在“单词”和返回的字符之间跳过,例如:

#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代码的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com