鱼C论坛

 找回密码
 立即注册
查看: 3980|回复: 6

关于逻辑运算问题!!

[复制链接]
发表于 2012-8-17 23:43:17 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>

void main()
{
      char str[40];
      int cmp( char *str1, char *str2 );
      printf("Please enter the website you like the best : ");
      scanf("%s", str);
#ifndef CORRECT
#define CORRECT "fishc.com"
#endif
      if( cmp( str, CORRECT ) == 0 )
      {
            printf("\nYeah! You are a smart man!\n\n");
      }
      else
      {
            printf("\nYou fool! Man!!\n\n");
      }
}
int cmp( char *str1, char *str2 )
{
      int i = 0, j = 0;
      while( str1[i] )
      {
            while( str2[j] == str1[i] )
            {
                  i++;
                  j++;
                  if( !str2[j] )
                  {
                        return 0;
                  }
            }
            j = 0;
            i++;
      }
      return -1;
}




红色字,为什么是零的时候进入if条件的呢?  别的不会进入if条件呢?

最佳答案

查看完整内容

可以参考http://topic.csdn.net/u/20090423/10/f0e1cf84-ab7f-4e08-8de2-7e5645b121b1.html 里面的回答。

点评

下次发代码的时候 记得 用代码编辑框发哦 在编辑栏 上面有个 <>这个 点进去 把代码复制进去发出来就可以了  发表于 2012-8-19 03:50
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-17 23:43:18 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-18 00:10:44 | 显示全部楼层
前面不是有个不等号么  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-18 16:11:48 | 显示全部楼层
这句不是等价于if(str2[j]==NULL) 么?意思是如果字符串结束就返回。不知我的回答LZ是否满意?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-19 03:49:46 | 显示全部楼层
  1. #include <stdio.h>

  2. void main()
  3. {
  4.         char str[40];
  5.         int cmp( char *str1, char *str2 );
  6.         printf("Please enter the website you like the best : ");
  7.         scanf("%s", str);
  8. #ifndef CORRECT
  9. #define CORRECT "fishc.com"
  10. #endif
  11.         if( cmp( str, CORRECT ) == 0 )
  12.         {
  13.                 printf("\nYeah! You are a smart man!\n\n");
  14.         }
  15.         else
  16.         {
  17.                 printf("\nYou fool! Man!!\n\n");
  18.         }
  19. }
  20. int cmp( char *str1, char *str2 )
  21. {
  22.         int i = 0, j = 0;
  23.         while( str1 )
  24.         {
  25.                 while( str2[j] == str1 )
  26.                 {
  27.                         i++;
  28.                         j++;
  29.                         if( !str2[j] )                // 这里 当if 语句后面的表达式为真的时候才会执行里面的语句 所以只有当 整个表达式为真的时候才能执行
  30.                                                                 //又因为 在 str[2] 前面有个取反的运算符 所以 只有当str[2] 为假 (0)的时候  整个表达式 !str[2] 才为真 if语句才会被执行啊
  31.                         {
  32.                                 return 0;
  33.                         }
  34.                 }
  35.                 j = 0;
  36.                 i++;
  37.         }
  38.         return -1;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-22 00:28:04 | 显示全部楼层
!是取反符号,当str2[j]=0时,!str2[j]为1;if(1 ),也就直接进入语句里面,执行return 0了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-24 00:11:39 | 显示全部楼层
{:1_1:}小弟学了三个月了还没弄懂第四章的逻辑运算。自学好难:Q
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-11 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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