编程知识 cdmana.com

C语言基础问题 求解答

在比较函数中,for循环不执行,在输出结果中只输出s1<s2
个人找问题,觉得是for循环的判断条件i<s1.len&&i<s2.len出错,但我觉得没有问题。
但怕的就是自己觉得自己是对的,求解答。

#include<stdio.h>#include<string.h>#define TRUE 1#define FALSE 0#define MAXLEN 9typedef struct{    char ch[MAXLEN];    int len;}SString; //求长度 int Howlong(SString s){    int i;    for(i=0;s.ch[i]!='\0';i++);    return i;}//创建s2int Creat(SString *s){    int i;    char c;    printf("创建s2,请输入字符串:(以'$'结束):");    scanf("%c",&c);    i=0;    while(c!='$'){        scanf("%c",&c);        s->ch[i]=c;        i++;    }    s->ch[i]='\0';    s->len=Howlong(*s);    //printf("%d",s->len);    return TRUE;} //比较void Compare(SString s1,SString s2){    int i;    for(i=0;i<s1.len&&i<s2.len;i++)        if(s1.ch[i]!=s2.ch[i]){            if(s1.ch[i]-s2.ch[i]>0){            printf("s1>s2\n");            return;            }            else if(s1.ch[i]-s2.ch[i]<0){            printf("s1<s2\n");            return;            }        }    if(s1.len-s2.len>0)printf("s1>s2");    else if(s1.len-s2.len<0)printf("s1<s2");    else printf("s1==s2");    return;} //展示函数,测试使用void Show(SString s){    int i;    for(i=0;s.ch[i]!='\0';i++){        putchar(s.ch[i]);    }    printf("\n");}int main(){    SString s1={
   
   
   
   "abcdefg"},s2;    printf("s1=%s的字符串长度为%d\n",s1.ch,Howlong(s1));    Creat(&s2);    Compare(s1,s2);    Show(s1);}



参考答案1:
  1. 可以通过调试设置断点,来判断for(i=0;i<s1.len&&i<s2.len;i++)处有没有按照你设想的来运行;
  2. 调试发现,s2通过Creat函数s2.len有赋值,s1.len则为0
  3. 正确代码如下
int main(){    SString s1={
   
   
   
   "abcdefg"},s2;    printf("s1=%s的字符串长度为%d\n",s1.ch,Howlong(s1));    s1.len = Howlong(s1);    Creat(&s2);    Compare(s1,s2);    Show(s1);}



参考答案2:



参考答案3:

学会调试




参考答案4:

版权声明
本文为[CSDN问答]所创,转载请带上原文链接,感谢
https://ask.csdn.net/questions/7542491

Scroll to Top