标题:自编字符、字符串处理函数
只看楼主
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
结帖率:83.33%
已结贴  问题点数:20 回复次数:11 
自编字符、字符串处理函数
发现不了这个代码为什么不能运行,我感觉没错啊。。
#include<stdio.h>
#include <stdlib.h>
void change(char str[]);
int bijiao(char str1[], char str2[]);
int fuzhi(char str3[], char str4[]);
int fun(char str5[100]);
int per(char *a);
int main()
 {
     int val;
     int b,t,x,z;
     long int x1;
     int a1,b1=1,c1=0,y1;
     int a2,b2=0,a3;
     int i=1,sum=0;
     int m=0,n=0;
     char g,a4;
     char a[100];
     char str1[100], str2[100];
     char str3[10],str4[10],str5[100];
     char str6[100]={};char str7[100]={};
     printf("1.将大写字母转换为小写字母\n");
     printf("2.字符串比较\n");
     printf("3.字符串复制\n");
     printf("4.检查字符串是否为数字串,是返回1,否返回0\n");
     printf("5.数字串(长度不大于8)转换为相应的数值,并进行四则运算\n");
     printf("6.二进制转化为十进制\n");
     printf("7.判断正整数是几位数\n");
     printf("8.1-999中所有能被3和5整除的数的个数\n");
     printf("9.判断能否同时被3和5整除\n");
     printf("10.判断是否为英文字母\n");
     do
     {
        printf("请选择命令:\n");
        scanf("%d",&z);
     if(x==1)
     {
        printf("请输入大写字母:");
        gets(a);
        change(a);
        printf("输出小写字母:");
        puts(a);
     }
     if(x==2)
     {
        printf("请输入要比较的字符串:");
        gets(str1);
        gets(str2);
        if ((val = bijiao(str1, str2)) == 0)
            printf("等于");
        if (val< 0)
            printf("小于");
        if (val> 0)
            printf("大于");
     }
     if(x==3)
     {
        printf("请输入字符串:");
        scanf("%s", &str4);
        fuzhi(str3, str4);
        printf("目标串 : %s\n", str3);
     }
     if(x==4)
     {
        printf("请输入字符串:");
        scanf("%s",str5);
        t=fun(str5);
        if(t==1)
            printf("1\n");
        if(t==-1)
            printf("-1\n");
     }
     if(x==5)
     {
        printf("please input x:");
        scanf("%s",str6);
        printf("please input y:");
        scanf("%s",str7);
        m = per(str6);
        n = per(str7);
        printf("x=%d\n",m);
        printf("y=%d\n",n);
        printf("x+y=%d\n",m+n);
        printf("x-y=%d\n",m-n);
        printf("x*y=%d\n",m*n);
        printf("x/y=%f\n",(float)m/(float)n);
     }
     if(x==6)
     {
        printf("请输入一个二进制数:");
        scanf("%d",&x1);
        y1=x1;
        while(x1!=0)
        {
            a1=x1%10;
            c1=c1+a1*b1;
            b1=b1*2;
            x1=x1/10;
        }
        printf("对应的十进制数为%d\n",y1,c1);
     }
     if(x==7)
     {
        printf("请输入一个正整数:");
        scanf("%d",&a2);
        while(a2>0)
        {
        a2=a2/10;
        b2++;
        }
        printf("该正整数是几位数:%d",b2);
     }
     if(x==8)
     {
        for(i=1;i<=999;i++)
        {
            if(i%3==0&&i%5==0)
                sum=sum+1;
            else
                sum=sum+0;
        }
         printf("1-999中所有能被3和5整除的数的个数=%d",sum);
     }
     if(x==9)
     {
        printf("a=");
        scanf("%d",&a3);
        if(a3%3==0&&a3%5==0)
            printf("能同时被3和5整除");
        else
            printf("不能同时被3和5整除");
     }
     if(x==10)
     {
        printf("请输入字符:");
        a4=getchar();
        if((a4>='a' && a4<='z')||(a4>='A' && a4<='Z'))
            printf("是英文字母\n");
        else
            printf("不是英文字母\n");
     }
     printf("是否终止运行?(YorN)");
        getchar();
        scanf("%c",&g);
    }
    while(g=='N');
     return 0;
 }
void change(char str[])
 {
     int i;
     for (i = 0; str[i] != '\0'; i++)
         if (str[i] >= 'A'&&str[i] <= 'Z')
             str[i] += 32;
 }
int bijiao(char str1[], char str2[])
 {
     int i;
     for (i = 0; str1[i] != '\0'; i++)
     {
         if (str1[i]>str2[i])
             return 1;
         else if (str1[i]<str2[i])
             return -1;
     }
     return 0;
 }
int fuzhi(char str3[], char str4[])
 {
     int i = 0;
     while (str3[i] = str4[i]) i++;
     return 0;
 }
  int fun(char str5[100])
 {
     int i;
     for (i = 0; i <= 100; i++)
     {
         if (str5[i] == 0)
         {
             return 1;
         }
         if ((str5[i] - '0') < 0 || (str5[i] - '0') > 9)
         {
             return -1;
         }
     }
     return 1;
 }
 int per(char *a)
 {
     int n=0;
     for(; *a; ++a)
         n = n*10 + (*a-'0');
     return n;
 }
搜索更多相关主题的帖子: include change 字符串 
2017-05-20 17:41
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:2 
残留在缓冲区的回车问题。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-20 17:57
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
得分:0 
回复 2楼 renkejun1942
什么意思呀😥
2017-05-21 00:23
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:15 
我勒个去,都说这么明白了。
你运行一下你的程序,看一下结果。
结果是看起来像没有进入分支选项,对吧?

只要你了解gets()这个函数,就会知道为什么会看起来像没有进入分支。

gets()遇到\n就停止接受输入。
然后往上查找,最终原因是scanf()这个函数,在你输入任意数字之后,你输入的是一个数字+一个回车,数字被传递给变量,回车停留在缓冲区。

因此,当进入分支之后,回车给了gets()函数,而这个函数遇到回车就停止接受输入,所以会表现出像是没有进入分支的结果。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-21 09:45
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
得分:0 
回复 4楼 renkejun1942
听懂了,但是我不会解决,我c语言学的不是很好,还在恶补阶段,所以淡定淡定,然后要怎么解决啊,别被我蠢哭啊,老铁
2017-05-21 10:48
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:1 
在scanf()函数后面加一条 getchar();

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-21 10:50
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
得分:0 
好的
2017-05-21 13:23
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:2 
回复 7楼 爱睡觉的猫
如果缓冲区不只有一个数据,要清除缓冲区所有内容的话:while((c = getchar() != EOF) && c != '\n')    会读取缓冲区所有
2017-05-21 14:08
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
得分:0 
回复 6楼 renkejun1942
能帮我看看为什么不能循环么
2017-05-21 16:43
爱睡觉的猫
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2017-4-19
得分:0 
回复 8楼 Emotiona
现在的问题是它居然不能循环
2017-05-21 16:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477188-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.129290 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved