| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2872 人关注过本帖
标题:写了个计算器程序,求完善~
只看楼主 加入收藏
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:1 
研究研究!!
2011-08-09 10:40
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 17楼 lccwyj
编译没错,链接出错、
2011-08-09 11:46
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 19楼 心的紫色
我用VC++6.0测试过可以
2011-08-09 11:49
zerokingf1
Rank: 2
等 级:论坛游民
帖 子:31
专家分:23
注 册:2011-7-30
收藏
得分:1 
单片机有个键盘扫描程序。这个不懂
2011-08-09 12:05
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
程序代码:
# include <stdio.h>
# include <conio.h>
# define Key_Esc 0x1b
int main(void)
{
    double count(double a, char b, double c);// 声明一个计算函数
    double a=0;
    char b;
    double c;

    printf("This is a calculator:\n");
    printf("格式如: 4*5\n");

    while (1) //循环多次计算
    {  
        a = getch();
        if(a==Key_Esc)  //判断按键是否为ESC
        {
            printf("你输入了ESC,程序结束\n");
            break;
        }
        else
            printf("%lf", (double)a);
        b = getch();
        if(b==Key_Esc)  //判断按键是否为ESC
        {
            printf("你输入了ESC,程序结束\n");
            break;
        }
        else
            printf("%c", b);
        c = getch();
        if(c==Key_Esc)  //判断按键是否为ESC
        {
            printf("你输入了ESC,程序结束\n");
            break;
        }
        else
            printf("%lf", (double)c);

        printf("%lf\n", count(a,b,c));
    }
    return 0;
}
double count(double a, char b, double c)  //定义一个计算函数
{
    switch (b) //判断b是什么符合
    {  
        case 42 :  return a*c; break; //42对应的符合是 *
        case 43 :  return a+c; break; //    +
        case 45 :  return a-c; break; //    -
        case 47 :  return a/c; break; //    /
        default : printf("错误:只能计算加(+)、减(-)、乘(*)、除(/).\n");
    }
}
  

              为什么这样还不行?



                                                
2011-08-09 12:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <conio.h>
#include "get.h"

void Print(const wchar_t cBuffer[]);

void main(void)
{
    GET Get;
    Print(L"请输入50个字符以内的字符串(Enter确认, Esc中断): ");
    if (Get.Read_String(50) >= 0)
    {
        Print(L"\n\n您输入的字符串是: ");
        Print(Get.Buffer);
        printf_s("\nLength = %d", Get.Length);
    }
    else
    {
        Print(L"\n\n== 输入中断 ==");
    }
    _getwch();
}

// 输出字符串
void Print(const wchar_t cBuffer[])
{
    while (*cBuffer)
    {
        _putwch(*cBuffer);
        cBuffer++;
    }
}


[ 本帖最后由 TonyDeng 于 2011-8-9 15:34 编辑 ]

授人以渔,不授人以鱼。
2011-08-09 12:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>

// 键码常数
#ifndef _KEYCODE
    #define _KEYCODE
    const wctype_t K_NUL       = 0x0000;        // 空字符
    const wctype_t K_SOH       = 0x0001;        // 标题开始
    const wctype_t K_STX       = 0x0002;        // 正文开始
    const wctype_t K_ETX       = 0x0003;        // 正文结束
    const wctype_t K_EOT       = 0x0004;        // 传输结束
    const wctype_t K_ENQ       = 0x0005;        // 请求
    const wctype_t K_ACK       = 0x0006;        // 收到通知
    const wctype_t K_BEL       = 0x0007;        // 响铃
    const wctype_t K_BACKSPACE = 0x0008;        // 退格
    const wctype_t K_TAB       = 0x0009;        // 水平制表符
    const wctype_t K_LF        = 0x000A;        // 换行
    const wctype_t K_VT        = 0x000B;        // 垂直制表符
    const wctype_t K_FF        = 0x000C;        // 换页符
    const wctype_t K_ENTER     = 0x000D;        // 回车
    const wctype_t K_SO        = 0x000E;        // 不用切换
    const wctype_t K_SI        = 0x000F;        // 启用切换
    const wctype_t K_DLE       = 0x0010;        // 数据链路转义
    const wctype_t K_DC1       = 0x0011;        // 设备控制1
    const wctype_t K_DC2       = 0x0012;        // 设备控制2
    const wctype_t K_DC3       = 0x0013;        // 设备控制3
    const wctype_t K_DC4       = 0x0014;        // 设备控制4
    const wctype_t K_NAK       = 0x0015;        // 拒绝接收
    const wctype_t K_SYN       = 0x0016;        // 同步空闲
    const wctype_t K_ETB       = 0x0017;        // 传输块结束
    const wctype_t K_CAN       = 0x0018;        // 取消/作废
    const wctype_t K_EM        = 0x0019;        // 介质中断
    const wctype_t K_SUB       = 0x001A;        // 替补
    const wctype_t K_ESC       = 0x001B;        // 溢出
    const wctype_t K_FS        = 0x001C;        // 文件分割符
    const wctype_t K_GS        = 0x001D;        // 分组符
    const wctype_t K_RS        = 0x001E;        // 记录分离符
    const wctype_t K_US        = 0x001F;        // 单元分隔符
    const wctype_t K_SPACE     = 0x0020;
    const wctype_t K_CDEL      = 0x007F;        // ASCII DEL
    const wctype_t K_UP        = 0xE048;
    const wctype_t K_DOWN      = 0xE050;
    const wctype_t K_LEFT      = 0xE04B;
    const wctype_t K_RIGHT     = 0xE04D;
    const wctype_t K_HOME      = 0xE047;
    const wctype_t K_END       = 0xE04F;
    const wctype_t K_PGUP      = 0xE049;
    const wctype_t K_PGDN      = 0xE051;
    const wctype_t K_INS       = 0xE052;
    const wctype_t K_DEL       = 0xE053;
#endif

class GET
{

    private:

        bool IsAscii(const wchar_t Character);            // 检测是否ASCII字符
        bool IsHz(const wchar_t Character);                // 检测是否汉字
        wctype_t Read_Key(void);                        // 从键盘读入一键

    public:

        wchar_t Buffer[256];                            // 没人会从键盘敲入超过255(Unicode)字符
        size_t Length;                                    // 实际字符串的字符数

        int Read_String(const size_t nSize);            // 从键盘读入字符串
};


[ 本帖最后由 TonyDeng 于 2011-8-9 15:33 编辑 ]

授人以渔,不授人以鱼。
2011-08-09 12:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <conio.h>
#include <new.h>
#include "get.h"

// 检测是否ASCII字符
bool inline GET::IsAscii(const wchar_t Character)
{
    return ((Character >= 0x0020) && (Character <= 0x007E)) || ((Character >= 0xF900) && (Character <= 0xFA2D));
}

// 检测是否汉字
bool inline GET::IsHz(const wchar_t Character)
{
    return (Character >= 0x4E00) && (Character <= 0x9FA5);
}

// 从键盘读入一个按键, 返回其键码
wctype_t inline GET::Read_Key(void)
{
    wint_t KeyCode = _getwch();
    if (KeyCode == 0xE0)
    {
        KeyCode = (KeyCode << 8) + _getwch();
    }
    return KeyCode;
}

// 读入字符串
int GET::Read_String(const size_t nSize)
{
    wctype_t KeyCode;
    Buffer[0] = '\0';
    Length = 0;
    do
    {
        KeyCode = Read_Key();
        switch (KeyCode)
        {
            case K_ENTER:
                return Length;
            case K_ESC:
                Buffer[0] = '\0';
                return -1;
            case K_BACKSPACE:
                if (Length > 0)
                {
                    Length--;
                    if (IsAscii(Buffer[Length]))
                    {
                        Buffer[Length] = K_SPACE;
                        _putwch(K_BACKSPACE);
                        _putwch(Buffer[Length]);
                        _putwch(K_BACKSPACE);
                    }
                    if (IsHz(Buffer[Length]))
                    {
                        Buffer[Length] = K_SPACE;
                        _putwch(K_BACKSPACE);
                        _putwch(K_BACKSPACE);
                        _putwch(Buffer[Length]);
                        _putwch(K_BACKSPACE);
                    }
                }
                else _putwch(K_BEL);
                break;
            default:
                Buffer[Length] = KeyCode;
                _putwch(Buffer[Length]);
                Length++;
                Buffer[Length] = '\0';
        }
    } while (Length < nSize);
    return Length;
}


[ 本帖最后由 TonyDeng 于 2011-8-9 15:32 编辑 ]

授人以渔,不授人以鱼。
2011-08-09 12:50
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:1 
有意思。

我们都在路上。。。。。
2011-08-09 13:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
还没弄好,本想写成像文本框那样可以编辑的,但现在的语言环境不支持原先DOS下那些直接输出到屏幕的功能了,再支持汉字的话,情形更有点复杂。在控制台下,值不值得这样做还有待考虑,如果单纯地退格修改(退格部分的代码我删掉了没发出来),这个是完全没有问题的。

授人以渔,不授人以鱼。
2011-08-09 13:55
快速回复:写了个计算器程序,求完善~
数据加载中...
 
   



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

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