糖逗 发表于 2019-11-24 11:08:01

C语言21课后题

需求:计算中英混合的字符串长度
问题:我这个代码有什么错误的地方吗,为啥输出结果不对?
原问题链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=72205&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570

#include <stdio.h>

#define MAX 1024

int main(void)
{
        char string;
        char* p = string;
        int count = 0;
        int ch;
       
        printf("请输入一个字符串:");
        fgets(string, MAX, stdin);
       
       
        while(ch = *(p++) != '\0')
        {
                if(ch < 0)
                {
                        p += 2;
                }
                count ++;       
        }
       
        printf("您总共输入了%d个字符", count-1);
        return 0;
}

糖逗 发表于 2019-11-25 08:49:43

这道题已经明白了 while(ch = *(p++) != '\0') 应该改成 while((ch = *(p++)) != '\0')

jackz007 发表于 2019-11-25 11:55:26

本帖最后由 jackz007 于 2019-11-25 11:59 编辑

糖逗 发表于 2019-11-25 08:49
这道题已经明白了 while(ch = *(p++) != '\0') 应该改成 while((ch = *(p++)) != '\0')

   问题远不止于此,
      while(ch = *(p++) != '\0')
      {
                if(ch < 0)
                {
                      p += 2;
. . . . . .
   当 ch 是中文字符时,p 将步进 3 个 char 单位,这个是你预期的吗?
      试试我修改的版本?
#include <stdio.h>

#define MAX 1024

int main(void)
{
      char string , * p = string , ch                                                ;
      int count                                                                           ;
      printf("请输入一个字符串:")                                                      ;
      fgets(string , MAX , stdin)                                                         ;
      for(count = 0 , p = string ; (ch = * p) != '\n' ; p ++ , count ++ ) if(ch < 0) p ++ ;// 注意,循环终止条件是 '\n' 不是 '\0'
      printf("您总共输入了%d个字符", count)                                             ;// 注意,这里相应地是 count,不是 count - 1
      return 0                                                                            ;
}

糖逗 发表于 2019-11-25 14:02:23

jackz007 发表于 2019-11-25 11:55
问题远不止于此,
      while(ch = *(p++) != '\0')
      {


昨天和你讨论后那个问题改正过来了,后来我运行不对是因为没加括号{:10_278:}

糖逗 发表于 2019-11-25 14:06:04

jackz007 发表于 2019-11-25 11:55
问题远不止于此,
      while(ch = *(p++) != '\0')
      {


你的代码很值得学习,我要敲一遍你的。

jackz007 发表于 2019-11-25 14:12:04

糖逗 发表于 2019-11-25 14:06
你的代码很值得学习,我要敲一遍你的。

      楼主客气了,彼此互相学习。
页: [1]
查看完整版本: C语言21课后题