鱼C论坛

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

[已解决]字符串输入

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

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

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

x
scanf("%c",&ch);
        while(ch!='\n')
        {
                memset(a, 0, sizeof a); 
                for(i=0;ch!=' '&&ch!='\n';i++)
                {
                        scanf("%c",&ch);
                        a[i]=ch;
                }........
}

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

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

int main(void)
{
        char ch , a[256]                                                                           ;
        int i                                                                                      ;
        memset(a , 0 , sizeof a)                                                                   ;
        for(i = 0 ; scanf("%c" , & ch) == 1 && ch != ' ' && ch != '\n' ; a[i] = '\0') a[i ++] = ch ;
        puts(a)                                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

int main(void)
{
        char ch , a[256]                                                                           ;
        int i                                                                                      ;
        memset(a , 0 , sizeof a)                                                                   ;
        for(i = 0 ; scanf("%c" , & ch) == 1 && ch != ' ' && ch != '\n' ; a[i] = '\0') a[i ++] = ch ;
        puts(a)                                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

scanf("%c" , & ch) == 1
这句代码是在判断什么?还有后面为什么要将a[i]=‘\0’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 11:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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