【发布时间】:2017-07-04 17:54:17
【问题描述】:
问题是取三个名字作为输入,并检查第四个输入是否是这三个名字之一的第一个字母。 *它只需要是 alpha 类型,不能是其他类型。
示例输入:
@ON SNOW
ARYA STARK
HODOR
@
输出:
NO
我的代码:
#include <stdio.h>
#include <ctype.h>
int main(){
char s1[100],s2[100],s3[100];
char ch[1];
scanf("%[^\n]s",s1);
scanf("%[^\n]s",s2);
scanf("%[^\n]s",s3);
scanf("%s",ch);
if(isalpha(ch[0]) && (s1[0]==ch[0] || s2[0]==ch[0] || s3[0]==ch[0]))
printf("yes");
else
printf("no");
}
当我发现gets() 不再有效时,我尝试了scanf("%s",s1);。
但由于它没有在空格" " 之后存储计算,所以我尝试了这个scanf("%[^\n]s",s1);。但扫描停止在名字本身。
John Player
NO
不使用循环只使用分支的char数组中存储多个字符串的方法是什么??
【问题讨论】:
-
试试
"%[^\n]s"-->"%99[^\n]%*c" -
@BLUEPIXY 你能解释一下这是什么意思吗?!是的..编码现在可以工作了!
-
注意
%[…]是一个扫描集,一个完整的转换规范。尾随的s只会匹配文字s,但由于下一个字符是换行符,匹配将失败,但你永远不会知道。扫描集(以及%c和%n——只有这三个转换说明符)不会跳过前导空格。在代码的开头(而不是结尾)添加一个空格。或者使用fgets()来读取行——这可能会更好。 -
@Kraken 我相信
gets()已从 stdio.h 作为 std 库函数中删除,因为会导致缓冲区溢出,并建议我们fgets()。这些天你收到一条消息说:函数“gets”的隐式声明警告:“gets”函数很危险,不应该使用 -
如果只教了基础知识,那么使用
scanf()和扫描集是不太可能教的;它不是scanf()基础知识的一部分。使用fgets()相对简单。并且结果通常比使用scanf()等更可预测。