liyiqi 发表于 2019-10-20 15:18:33

为什么我用dev c++输入a=5,b=5,没有结果,而且没有报错,


#include<stdio.h>
int main()    //模仿strncmp函数
{
int a,b,n,d;
scanf("%d",&a,&b);
char star1;
char star2;
printf("请输入\n");
for(n=0;n<a-1;n++)
        scanf("%c",&star1);
star1='\0';
printf("请输入\n");
for(n=0;n<b-1;n++)
        scanf("%C",&star2);
star2='\0';
do
{
        n=0;
   d=star1-star2;
        n+=1;
} while(d=0&&n!=a-1);
printf("%d",d);
return 0;

jackz007 发表于 2019-10-20 15:58:35

本帖最后由 jackz007 于 2019-10-20 16:15 编辑

         这句代码有错:
scanf("%d",&a,&b);

         在 star1 == star2 的情况下,这个代码无疑会是死循环,必须把 n = 0 放循环外头!
      do {
                n = 0                                          ;
                d = star1 - star2                        ;
                n +=1                                        ;
      } while(d = 0 && n! = a - 1)                           ;

   此外,如果 a、b 不一样大,而且,a > b,则把 a 用作 star2 的下标,会导致下标超界。

   所以,代码应该这么修改:

#include<stdio.h>

int main()    //模仿strncmp函数
{
      int a , b , e , n , d                                                 ;
      char c                                                                ;
      scanf("%d%d" , & a , & b)                                             ;
      e = (a > b) ? a : b                                                   ;
      char star1                                                         ;
      char star2                                                         ;
      for(n = 0 ; n < e ; n ++) star1 = 0 , star2 = 0               ;
      printf("请输入:")                                                   ;
      fflush(stdin)                                                         ;
      for(n = 0 ; n < a - 1 && (c = getchar()) != '\n' ; n ++) star1 = c ;
      star1 ='\0'                                                    ;
      a = n                                                               ;
      printf("请输入:")                                                   ;
      fflush(stdin)                                                         ;
      for(n = 0 ; n < b - 1 && (c = getchar()) != '\n' ; n ++) star2 = c ;
      star2 = '\0'                                                   ;
      b = n                                                               ;
      e = (a > b) ? a : b                                                   ;
      for(n = 0 ; n < e && ! (d = star1 - star2) ; n ++)            ;
      printf("%d\n" , d)                                                    ;
}

页: [1]
查看完整版本: 为什么我用dev c++输入a=5,b=5,没有结果,而且没有报错,