kopshin3 发表于 2020-10-26 23:44:43

字符处理函数课后习题遇到的问题

#include"stdio.h"
#include"string.h"
#include"math.h"

char s1;
char s2;
int num,i,j;

int main()
{
        printf("请输入第一个字符串;");
        scanf("%s",&s1);
        printf("请输入第二个字符串;");
        scanf("%s",&s2);
        printf("请输入比较的字符数;");
        scanf("%d",&num);
        if(strncmp(s1,s2,num)>0)
        {
                for(i=1;i<num;i++)
                {
                        if(s1-s2!=0)
                        {
                                j=pow(s1-s2,2);
                                j=sqrt(j);
                                printf("比较的结果是;%d\n",j);
                        }       
                }
        }
        else if(strncmp(s1,s2,num)<0)
        {
                for(i=1;i<num;i++)
                {
                        if(s1-s2!=0)
                        {
                                j=pow(s1-s2,2);
                                j=sqrt(j);
                                printf("比较的结果是;%d\n",-j);
                        }       
                }
        }
        else
        {
                printf("比较的结果是;%d\n",0);
        }
        return 0;       
}
输入字符串不带空格的时候运行正常,输入的字符串带入空格以后会在第一个字符串输入完毕按下回车键直接出结果。

LuLD 发表于 2020-10-27 01:18:52

scanf在输入空格后会产生和回车一样的效果,结束输入。

所以用scanf("%[^\n]",string);只在回车后结束。

风过无痕1989 发表于 2020-10-27 01:56:29

LuLD 发表于 2020-10-27 01:18
scanf在输入空格后会产生和回车一样的效果,结束输入。

所以用scanf("%[^\n]",string);只在回车后结束。

试过了,行不通,不过比他自己的方法好一点,现在要求输入比较数目了,没有直接运行到底

风过无痕1989 发表于 2020-10-27 01:59:02

“用scanf("%[^\n]",string);只在回车后结束。”行不通,还是用循环吧,程序如下:

#include"stdio.h"
#include"string.h"
#include"math.h"

char s1;
char s2;
int num;

int main()
{
      int i = 0,j;
      char ch;
        printf("请输入第一个字符串;");
      while((ch = getchar()) != '\n')
        {
                s1 = ch;
                i++;
        }
        i = 0;

      printf("请输入第二个字符串;");
      while((ch = getchar()) != '\n')
        {
                s2 = ch;
                i++;
        }

      printf("请输入比较的字符数;");
      scanf("%d",&num);

      if(strncmp(s1,s2,num)>0)
      {
                for(i=1;i<num;i++)
                {
                        if(s1-s2!=0)
                        {
                              j=pow(s1-s2,2);   // 先平方,下一句再求其平方根?
                              j=sqrt(j);            // 目的何在?
                              printf("比较的结果是;%d\n",j);
                        }      
                }
      }
      else if(strncmp(s1,s2,num)<0)
      {
                for(i=1;i<num;i++)
                {
                        if(s1-s2!=0)
                        {
                              j=pow(s1-s2,2);
                              j=sqrt(j); // (与上面的一样,)这样做会有从 double 型转为 int 型数据可能丢失的警告
                              printf("比较的结果是;%d\n",-j);
                        }      
                }
      }
      else
      {
                printf("比较的结果是;%d\n",0);
      }
      return 0;      
}

LuLD 发表于 2020-10-27 09:19:12

风过无痕1989 发表于 2020-10-27 01:56
试过了,行不通,不过比他自己的方法好一点,现在要求输入比较数目了,没有直接运行到底

我之前一个的时候 是正常的,哎,难受

xieglt 发表于 2020-10-27 11:05:05

LuLD 发表于 2020-10-27 09:19
我之前一个的时候 是正常的,哎,难受

这样写就可以了
        printf("请输入第一个字符串;");

        scanf("%[^\n]",s1);
        getchar();

        printf("请输入第二个字符串;");

        scanf("%[^\n]",s2);
        getchar();

        printf("请输入比较的字符数;");
        scanf("%d",&num);

LuLD 发表于 2020-10-27 15:31:44

xieglt 发表于 2020-10-27 11:05
这样写就可以了

截取 结束符

有道理

kopshin3 发表于 2020-10-27 23:24:31

风过无痕1989 发表于 2020-10-27 01:59
“用scanf("%[^\n]",string);只在回车后结束。”行不通,还是用循环吧,程序如下:

刚开始学习,不知道怎么快速求绝对值,先平方再开方是为了求绝对值。{:5_96:}

风过无痕1989 发表于 2020-10-27 23:32:16

kopshin3 发表于 2020-10-27 23:24
刚开始学习,不知道怎么快速求绝对值,先平方再开方是为了求绝对值。

求绝对值有函数 abs()
页: [1]
查看完整版本: 字符处理函数课后习题遇到的问题