为什么我用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 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]