标题:最好现在在的,取数的哪一步不懂,在线给个解释最好
只看楼主
菜鸟九号
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-5-1
结帖率:75%
已结贴  问题点数:20 回复次数:7 
最好现在在的,取数的哪一步不懂,在线给个解释最好
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 20
void beep();
void GetNumberStr (char s[]);
void AddNumberStr (char a[],char b[],char c[]);
char AddChar (char ch1,char ch2);
void LeftTrim (char str[]);
int tag=0;
void main ()
{
    char a[N+1]={0},b[N+1]={0},c[N+2];
    printf("a=");
    while (strlen (a)==0)
      GetNumberStr (a);
    printf("\nb=");
    while (strlen (b)==0)
      GetNumberStr (b);
     AddNumberStr (a,b,c);
     printf("\na+b=%s\n",c);
}
void GetNumberStr (char s[])
{
    int i=0;
    char ch;
    while (1)
    {ch=getch();
    if (ch=='\r')
        break;
    if (ch=='\b')
    {if (i>0)
    {printf("%c %c",ch,ch);i--;}
    else
        beep();
    continue;}
    if (ch<'0'||ch>'9')
    {
        beep();
        continue;}
    if (i<N)
    {printf("%c",ch);
    s[i++]=ch;}
    else
        beep();}
    s[i]='\0';}   
void beep()
{printf("\07");}

void AddNumberStr (char a[],char b[],char c[])
{int i,j,k;
memset (c,' ',N+2);
i=strlen (a)-1;
j=strlen (b)-1;
k=N;
while (i>=0&&j>=0)
c[k--]=AddChar (a[i--],b[j--]);
while (i>=0)
c[k--]=AddChar (a[i--],'0');
while (j>=0)
c[k--]=AddChar (b[i--],'0');
if (tag==1)
c[k]='1';
c[N+1]='\0';
LeftTrim (c);}

char AddChar(char ch1,char ch2)
{char ch;
ch=(ch1-0x30+ch2-0x30)+tag;
if (ch>=10)
{tag=1;
return (ch-10+0x30);}
else
{tag=0;
return (ch+0x30);}}

void LeftTrim (char str[])
{int i;
for (i=0;str[i]==' ';i++)
;
strcpy (str,str+i);}
搜索更多相关主题的帖子: void char tag printf while 
2017-07-06 21:27
菜鸟九号
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-5-1
得分:0 
if (ch=='\r')
        break;
2017-07-06 21:29
菜鸟九号
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-5-1
得分:0 
为什么a=的时候按回车键不是把s[]置为00,就这一点

2017-07-06 21:31
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
得分:7 
可以的话把你在三楼的问题修正以下
2017-07-06 22:03
菜鸟九号
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2017-5-1
得分:0 
回复 4楼 lmlm1001
我的意思是输入数组的时候,为什么按回车键没有直接显示b=,感觉按了回车键就会跳转while循环,执行s[0]='\0',所以直接执行b=应该理所当然吧
2017-07-07 09:52
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 
这代码一点缩进都没有
看着乱乱的  根本就不知道你问的代码在哪里

DO IT YOURSELF !
2017-07-07 09:55
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
得分:0 
建议你把\r 换成\n再试试
2017-07-07 12:21
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
得分:0 
回复 5楼 菜鸟九号
当你直接按下回车时,字符串a的长度为0,会继续循环
while (strlen (a)==0)
      GetNumberStr (a);
2017-07-07 19:36



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




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

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