| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 694 人关注过本帖
标题:有关乘除计算的问题
只看楼主 加入收藏
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:9 
有关乘除计算的问题
此程序的作用是能进行简单的乘除运算,但几乎把用户可能出现的错误都考虑进去了
感觉程序没什么问题,但就是只能显示开始的“请输入两个数A=”然后我输入一个数字,就运行不下去了,为什么啊
#include"stdio.h"
#include"stdlib.h"
int fun1(char *g)  /*检查输入的数是否正常*/
{
    int point=0,i,k=1;
    for(i=0;i<sizeof(g);i++)
    {
        if(*(g+i)!='.'&&(*(g+i)<'0'||*(g+i)>'9'))
            k=0;
        else
            if(*(g+i)=='.')
                point++;
    }
    if(point>1)
        k=0;
    return k;
}
float fun2(char *p)  /*将字符串组合成一个数*/
{
    float q;
    q=atof(p);
    return q;
}
void main( )
{
    int k;
    char *x,*y,*x1,*y1;
    float a,b,MUL,DIV;
    printf("请输入两个数A=");
    scanf("%s",x);
    printf("B=");
    scanf("%s",y);
    if(fun1(x)==1&&fun1(y)==1)
    {
       a=fun2(x);
       b=fun2(y);
       MUL=a*b;
       if(b==0)
       {
           while(1)
           {
               printf("您输入的数不符合除法运算规则,请重新输入");
               printf("A=\n");
               scanf("%s",x1);
               printf("B=\n");
               scanf("%s",y1);
               a=fun2(x1);
               b=fun2(y1);
               if(b==0)
                   continue;
               if(b!=0)
                   break;
           }
       }
       if(b!=0)
           DIV=a/b;
       printf("相乘结果为%f,相除结果为%f\n",MUL,DIV);
       }
}
搜索更多相关主题的帖子: 计算 include return 用户 
2012-02-27 00:14
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:10 
程序代码:
    int k;
    char *x,*y,*x1,*y1;
    float a,b,MUL,DIV;
    printf("请输入两个数A=");
    scanf("%s",x);
泪奔了,论坛上面发了那么多有关指针的文章。
看到这里心冷了。。。

x 指针 你没有初始化。 char *x 只是定义一个指针用来指向你要数据的内存地址。
但你现在没有给他赋值,你的指针指向未知内存地址,这块地址你正好不能访问,所以提示内存不可读。
。。。。。。。。。。。。。。。。
要么就不用指针。。
定义指针的时候不给分配内存 就把他赋值NULL 省的出现非法访问

用心做一件事情就这么简单
2012-02-27 00:20
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 2楼 小鱼儿c
才进论坛。。。
但我赋了初值还是没用啊
2012-02-27 00:28
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
你要么就给指针赋值一个可以存取的空间。。
比喻 char *x =(char *)malloc(sizeof(char)*n); n的个数你自己定。

看你代码,你就直接把x那些定义成一个数组就是了。
何必那么麻烦

用心做一件事情就这么简单
2012-02-27 00:32
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
我的指针学的不好,用指针就是想多练练。
按你说的给指针x和y一个存储空间,没有出现我说的哪个问题了
但是输入数后它就自己停止了
显示的内容是
请输入两个数A=1
B=4
press any key to continue

2012-02-27 00:49
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
这是为什么呢

我的地盘
2012-02-27 15:09
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 6楼 hnuhsg1226
我也表示无法理解
2012-02-27 20:57
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
还有帮忙看看的吗?确实找不出来其他问题了
2012-02-27 21:39
seeworld
Rank: 2
等 级:论坛游民
帖 子:19
专家分:39
注 册:2011-10-7
收藏
得分:0 
#include"stdio.h"
#include"stdlib.h"
#include <string.h> /* 加上string.h头文件 */
int fun1(char *g)  /*检查输入的数是否正常*/
{
    int point=0,i,k=1;
    for(i=0;i<strlen(g);i++)/* 把sizeof改成strlen */
    {
        if(*(g+i)!='.'&&(*(g+i)<'0'||*(g+i)>'9'))
            k=0;
        else
            if(*(g+i)=='.')
                point++;
    }
    if(point>1)
        k=0;
    return k;
}
float fun2(char *p)  /*将字符串组合成一个数*/
{
    float q;
    q=atof(p);
    return q;
}
void main( )
{
    int k;
    char *x=NULL,*y=NULL,*x1=NULL,*y1=NULL;
    float a,b,MUL,DIV;
    x=(char *)malloc(sizeof(char)*15);/* 加上申请空间的语句 */
    y=(char *)malloc(sizeof(char)*15);/* 加上申请空间的语句 */
    x1=(char *)malloc(sizeof(char)*15);/* 加上申请空间的语句 */
    y1=(char *)malloc(sizeof(char)*15);/* 加上申请空间的语句 */
    printf("请输入两个数A=");
    scanf("%s",x);
    printf("B=");
    scanf("%s",y);
    if(fun1(x)==1&&fun1(y)==1)
    {
       a=fun2(x);
       b=fun2(y);  
       if(b==0)
       {
           while(1)
           {
               printf("您输入的数不符合除法运算规则,请重新输入");
               printf("A=\n");
               scanf("%s",x1);
               printf("B=\n");
               scanf("%s",y1);
               a=fun2(x1);
               b=fun2(y1);
               if(b==0)
                   continue;
               if(b!=0)
                   break;
           }
       }
       MUL=a*b;/* 位置调到这里 */
       if(b!=0)
           DIV=a/b;
       printf("相乘结果为%g,相除结果为%g\n",MUL,DIV);
       }
}
2012-02-27 23:13
熊猫的黑眼圈
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 9楼 seeworld
谢了,基本达到效果了。。。。非常感动。。。
2012-03-01 23:07
快速回复:有关乘除计算的问题
数据加载中...
 
   



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

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