【发布时间】:2020-12-16 12:22:16
【问题描述】:
int main()
{
char i;
char s;
printf("Enter first char : ");
scanf("%s", &i);
printf("Enter second char : ");
scanf("%s", &s);
printf("%c", i);
printf("%c", s);
}
输出结果只打印第二个scanf值,而第一个scanf值不打印出来。
int main()
{
char i;
char s;
printf("Enter first char : ");
scanf("%c", &i);
printf("Enter second char : ");
scanf(" %c", &s);
printf("%c", i);
printf("%c", s);
}
当更改为使用 %c 时,两个 scanf 值都可以打印出来。
为什么 %s 只存储最后一个输入而第一个被忽略?
【问题讨论】:
-
您不能在带有标量
char变量的 scanf 中使用%s。%s写入一个字符串,包括一个终止空字符,因此使用标量char的地址将导致内存损坏。要么更改%s,要么改用char数组。 -
所以 %s 应该是 char s[10] 类型的吧?
-
类似的东西。请记住,没有长度检查,因此
char s[10]将适用于最长 9 个字符的字符串(加上一个用于空字符)。 -
您应该永远使用原始的
%s,原因与您永远不应该使用gets完全相同。您需要char s[2]; scanf("%1s", s)或char s; scanf("%c", s),或者做正确的事并完全停止使用scanf。只需执行int s; s = getchar();,然后在while 循环中丢弃空格。
标签: c