DraHong 2021-10-23 22:43 采纳率: 100%
浏览 20
已结题

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 9

typedef struct{
    char ch[MAXLEN];
    int len;
}SString; 
//求长度 
int Howlong(SString s){
    int i;
    for(i=0;s.ch[i]!='\0';i++);
    return i;
}
//创建s2
int 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);
}

  • 写回答

2条回答 默认 最新

  • 路漫漫其修远. 博客专家认证 2021-10-24 12:34
    关注
    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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月1日
  • 已采纳回答 10月24日
  • 创建了问题 10月23日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改