鱼C论坛

 找回密码
 立即注册
查看: 2886|回复: 4

[已解决]字符串输入

[复制链接]
发表于 2022-10-18 20:50:21 | 显示全部楼层 |阅读模式

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

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

x
  1. scanf("%c",&ch);
  2.         while(ch!='\n')
  3.         {
  4.                 memset(a, 0, sizeof a);
  5.                 for(i=0;ch!=' '&&ch!='\n';i++)
  6.                 {
  7.                         scanf("%c",&ch);
  8.                         a[i]=ch;
  9.                 }........
  10. }
复制代码


我想以空格为分隔处理字符串,输入结束标志为回车,这样输入为什么不成功?
最佳答案
2022-10-18 21:01:05
本帖最后由 jackz007 于 2022-10-18 21:07 编辑

        因为判断滞后,这个代码是先把字符写入数组,然后,才判断被写入数组的字符是否是空格或者换行符。正确的顺序当然是先判断,符合条件才写入喽。
      
        试试下面的代码
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void)
  4. {
  5.         char ch , a[256]                                                                           ;
  6.         int i                                                                                      ;
  7.         memset(a , 0 , sizeof a)                                                                   ;
  8.         for(i = 0 ; scanf("%c" , & ch) == 1 && ch != ' ' && ch != '\n' ; a[i] = '\0') a[i ++] = ch ;
  9.         puts(a)                                                                                    ;
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-18 21:01:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-18 21:07 编辑

        因为判断滞后,这个代码是先把字符写入数组,然后,才判断被写入数组的字符是否是空格或者换行符。正确的顺序当然是先判断,符合条件才写入喽。
      
        试试下面的代码
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void)
  4. {
  5.         char ch , a[256]                                                                           ;
  6.         int i                                                                                      ;
  7.         memset(a , 0 , sizeof a)                                                                   ;
  8.         for(i = 0 ; scanf("%c" , & ch) == 1 && ch != ' ' && ch != '\n' ; a[i] = '\0') a[i ++] = ch ;
  9.         puts(a)                                                                                    ;
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-19 19:39:11 | 显示全部楼层
jackz007 发表于 2022-10-18 21:01
因为判断滞后,这个代码是先把字符写入数组,然后,才判断被写入数组的字符是否是空格或者换行符。 ...

scanf("%c" , & ch) == 1
这句代码是在判断什么?还有后面为什么要将a[i]=‘\0’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-19 19:48:34 | 显示全部楼层
萨西摩尔·槿花 发表于 2022-10-19 19:39
scanf("%c" , & ch) == 1
这句代码是在判断什么?还有后面为什么要将a=‘\0’

        scanf() 函数的返回值是 1 啊,代表 scanf() 成功完成了一个参数的读取。至于后面,当然是在判断这次读取到的是否是空格或者回车符啊,如果不是,那就继续。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-19 19:59:04 | 显示全部楼层
jackz007 发表于 2022-10-19 19:48
scanf() 函数的返回值是 1 啊,代表 scanf() 成功完成了一个参数的读取。至于后面,当然是在判断 ...

感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 08:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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