鱼C论坛

 找回密码
 立即注册
查看: 971|回复: 3

[已解决]广大鱼油们,指针求助

[复制链接]
发表于 2020-4-9 17:03:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
上课听了甲鱼的例子,我想试试换成字符类型的,但是没有输出结果,也没有相同为什么。
两段代码如下:

这是甲鱼的例子代码

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a;
  5.         int *p = &a;
  6.         
  7.         printf("请输入一个整数:");
  8.         scanf("%d", &a);
  9.         printf("a = %d\n", a);
  10.         
  11.         printf("请输入一个整数:");
  12.         scanf("%d", p);
  13.         printf("a = %d\n", a);
  14.         
  15.         return 0;

  16.         
  17. }
复制代码



这是我照猫画虎的代码


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char str1;
  5.         char *pa = &str1;
  6.        
  7.         printf("请输入一个字符到 str1 中:");
  8.     scanf("%c", &str1);
  9.     printf("现在,str2 中的内容是:%s\n", str1);
  10.    
  11.     printf("请输入一个字符到 str1 中:");
  12.     scanf("%c", pa);
  13.     printf("现在,str2 中的内容是:%s", str1);
  14.         
  15.         return 0;
  16. }
复制代码
最佳答案
2020-4-9 17:10:01
本帖最后由 sunrise085 于 2020-4-9 17:14 编辑

用scanf读取%c要特别注意缓冲区是否为空。
你的代码中第一次你输入一个字符然后回车
scanf将那个字符读取出来赋值给str1,然后缓冲区还有一个回车字符
第二次的时候,读到的就是那个回车字符了。
另外printf应该用%c而不是%s

而对于用scanf读取%d或者%f等,则会把空白符(空格、Tab、回车)作为结束字符或者忽略。所以第一段程序没问题,你的这个就有问题了。
解决方法是在两个scanf之间清空一下缓冲区,用getchar()
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char str1;
  5.     char *pa = &str1;
  6.    
  7.     printf("请输入一个字符到 str1 中:");
  8.     scanf("%c", &str1);
  9.     printf("现在,str2 中的内容是:%c\n", str1);
  10.    
  11.     getchar();
  12.    
  13.     printf("请输入一个字符到 str1 中:");
  14.     scanf("%c", pa);
  15.     printf("现在,str2 中的内容是:%c", str1);
  16.         
  17.         return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-9 17:07:50 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-4-9 17:09 编辑

你用%c输入,用%s输出?
改成这样:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char str1;
  5.     char *pa = &str1;
  6.         
  7.     printf("请输入一个字符到 str1 中:");
  8.         scanf("%c", &str1);
  9.         getchar();
  10.     printf("现在,str2 中的内容是:%c\n", str1);
  11.    
  12.     printf("请输入一个字符到 str1 中:");
  13.     scanf("%c", pa);
  14.     printf("现在,str2 中的内容是:%c", str1);
  15.    
  16.     return 0;
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 17:10:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-4-9 17:14 编辑

用scanf读取%c要特别注意缓冲区是否为空。
你的代码中第一次你输入一个字符然后回车
scanf将那个字符读取出来赋值给str1,然后缓冲区还有一个回车字符
第二次的时候,读到的就是那个回车字符了。
另外printf应该用%c而不是%s

而对于用scanf读取%d或者%f等,则会把空白符(空格、Tab、回车)作为结束字符或者忽略。所以第一段程序没问题,你的这个就有问题了。
解决方法是在两个scanf之间清空一下缓冲区,用getchar()
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char str1;
  5.     char *pa = &str1;
  6.    
  7.     printf("请输入一个字符到 str1 中:");
  8.     scanf("%c", &str1);
  9.     printf("现在,str2 中的内容是:%c\n", str1);
  10.    
  11.     getchar();
  12.    
  13.     printf("请输入一个字符到 str1 中:");
  14.     scanf("%c", pa);
  15.     printf("现在,str2 中的内容是:%c", str1);
  16.         
  17.         return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-9 17:15:16 | 显示全部楼层
qiuyouzhi 发表于 2020-4-9 17:07
你用%c输入,用%s输出?
改成这样:

十分感谢,和楼下结合看,明白了不少。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 11:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表