萨西摩尔·槿花 发表于 2022-10-18 20:50:21

字符串输入

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


我想以空格为分隔处理字符串,输入结束标志为回车,这样输入为什么不成功?
{:10_286:}

jackz007 发表于 2022-10-18 21:01:05

本帖最后由 jackz007 于 2022-10-18 21:07 编辑

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

int main(void)
{
      char ch , a                                                                           ;
      int i                                                                                    ;
      memset(a , 0 , sizeof a)                                                                   ;
      for(i = 0 ; scanf("%c" , & ch) == 1 && ch != ' ' && ch != '\n' ; a = '\0') a = ch ;
      puts(a)                                                                                    ;
}

萨西摩尔·槿花 发表于 2022-10-19 19:39:11

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

scanf("%c" , & ch) == 1
这句代码是在判断什么?还有后面为什么要将a=‘\0’{:10_277:}

jackz007 发表于 2022-10-19 19:48:34

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

      scanf() 函数的返回值是 1 啊,代表 scanf() 成功完成了一个参数的读取。至于后面,当然是在判断这次读取到的是否是空格或者回车符啊,如果不是,那就继续。

萨西摩尔·槿花 发表于 2022-10-19 19:59:04

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

感谢
页: [1]
查看完整版本: 字符串输入