广大鱼油们,指针求助
上课听了甲鱼的例子,我想试试换成字符类型的,但是没有输出结果,也没有相同为什么。两段代码如下:
这是甲鱼的例子代码
#include <stdio.h>
int main()
{
int a;
int *p = &a;
printf("请输入一个整数:");
scanf("%d", &a);
printf("a = %d\n", a);
printf("请输入一个整数:");
scanf("%d", p);
printf("a = %d\n", a);
return 0;
}
这是我照猫画虎的代码
#include <stdio.h>
int main()
{
char str1;
char *pa = &str1;
printf("请输入一个字符到 str1 中:");
scanf("%c", &str1);
printf("现在,str2 中的内容是:%s\n", str1);
printf("请输入一个字符到 str1 中:");
scanf("%c", pa);
printf("现在,str2 中的内容是:%s", str1);
return 0;
} 本帖最后由 qiuyouzhi 于 2020-4-9 17:09 编辑
你用%c输入,用%s输出?
改成这样:
#include <stdio.h>
int main()
{
char str1;
char *pa = &str1;
printf("请输入一个字符到 str1 中:");
scanf("%c", &str1);
getchar();
printf("现在,str2 中的内容是:%c\n", str1);
printf("请输入一个字符到 str1 中:");
scanf("%c", pa);
printf("现在,str2 中的内容是:%c", str1);
return 0;
} 本帖最后由 sunrise085 于 2020-4-9 17:14 编辑
用scanf读取%c要特别注意缓冲区是否为空。
你的代码中第一次你输入一个字符然后回车
scanf将那个字符读取出来赋值给str1,然后缓冲区还有一个回车字符
第二次的时候,读到的就是那个回车字符了。
另外printf应该用%c而不是%s
而对于用scanf读取%d或者%f等,则会把空白符(空格、Tab、回车)作为结束字符或者忽略。所以第一段程序没问题,你的这个就有问题了。
解决方法是在两个scanf之间清空一下缓冲区,用getchar()
#include <stdio.h>
int main()
{
char str1;
char *pa = &str1;
printf("请输入一个字符到 str1 中:");
scanf("%c", &str1);
printf("现在,str2 中的内容是:%c\n", str1);
getchar();
printf("请输入一个字符到 str1 中:");
scanf("%c", pa);
printf("现在,str2 中的内容是:%c", str1);
return 0;
} qiuyouzhi 发表于 2020-4-9 17:07
你用%c输入,用%s输出?
改成这样:
十分感谢,和楼下结合看,明白了不少。
页:
[1]