鱼C论坛

 找回密码
 立即注册
查看: 1489|回复: 4

[已解决]函数问题

[复制链接]
发表于 2019-4-18 23:26:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <ctype.h>

void menu(void);
char get_choice(void);
char get_first(void);
float get_float(void);

int main(void)
{
        char choice;
        float num1 = 0, num2 = 0;

        menu();
        while ((choice = get_choice()) != 'q')
        {
                printf("Enter first number:");
                num1 = get_float();
                printf("Enter second number:");
                num2 = get_float();
                while (num2 == 0 && choice == 'd')
                {
                        printf("Please enter another number without 0.\n");
                        num2 = get_float();
                }

                switch (choice)
                {
                case 'a':
                        printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
                        break;
                case 's':
                        printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2);
                        break;
                case 'm':
                        printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2);
                        break;
                case 'd':
                        printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2);
                        break;
                default:
                        printf("Quit!\n");
                        break;
                }
        }
        printf("Bye!\n");

    getchar();
    return 0;
}

void menu(void)
{
        printf("Enter the operation of your choice:\n");
        printf("a.add          s.subtract\n");
        printf("m.multiply     d.divide\n");
        printf("q.quit\n");

}

char get_choice(void)
{
        char ch;
        ch = get_first();
        while (ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q')
        {
                printf("Please response with a,s,m,d or q.\n");
                ch = get_first();
        }
        return ch;
}

char get_first(void)
{
        int input;
        while(isspace(input = getchar()));
        while (getchar() != '\n')
                continue;

        return input;
}

float get_float(void)
{
        int num ,ch;

        while ((scanf_s("%f", &num)) != 1)
        {
                while ((ch = getchar()) != '\n')
                        putchar(ch);
                printf(" is not an number.\n");
                printf("Please enter a number 4, such as 2.5, -1.78E8, or 3:");
        }

        return num;
}



为什么num1和num2读取的scanf会错误
最佳答案
2019-4-19 17:01:42
本帖最后由 tianyuan 于 2019-4-19 17:02 编辑

float get_float(void)
{
        int num ,ch;                                                  //应该是folat num; 和 char ch;

        while ((scanf_s("%f", &num)) != 1)                 //这里是%f,那么num也要是float类型。float和Int 在内存里存储格式是不一样的
        {
                while ((ch = getchar()) != '\n')
                        putchar(ch);
                printf(" is not an number.\n");
                printf("Please enter a number 4, such as 2.5, -1.78E8, or 3:");
        }

        return num;
}


char get_first(void)                                       这个函数的返回值类型是char
{
        int input;                                             而你这里声明为int,虽然你运行后的结果没有问题,但是不要犯这种错
        while(isspace(input = getchar()));
        while (getchar() != '\n')
                continue;

        return input;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-19 07:37:18 From FishC Mobile | 显示全部楼层
类型不是么对上吗 定义的int 输入强制转换为float 分配的内存不够啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-19 17:01:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tianyuan 于 2019-4-19 17:02 编辑

float get_float(void)
{
        int num ,ch;                                                  //应该是folat num; 和 char ch;

        while ((scanf_s("%f", &num)) != 1)                 //这里是%f,那么num也要是float类型。float和Int 在内存里存储格式是不一样的
        {
                while ((ch = getchar()) != '\n')
                        putchar(ch);
                printf(" is not an number.\n");
                printf("Please enter a number 4, such as 2.5, -1.78E8, or 3:");
        }

        return num;
}


char get_first(void)                                       这个函数的返回值类型是char
{
        int input;                                             而你这里声明为int,虽然你运行后的结果没有问题,但是不要犯这种错
        while(isspace(input = getchar()));
        while (getchar() != '\n')
                continue;

        return input;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-4-20 23:20:35 | 显示全部楼层
本帖最后由 hickttye 于 2019-4-20 23:22 编辑

最后一个,char类型在系统中不也是一个int类型吗,用int类型不是更为准确吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 23:35:39 | 显示全部楼层
char和int在内存中占用的字节大小是不一样的!  我偷下懒  直接把别人资料给贴过来了
---------------------

short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。

在不同的系统上,这些类型占据的字节长度是不同的:

在32 位的系统上

short 占据的内存大小是2 个byte;
int占据的内存大小是4 个byte;
long占据的内存大小是4 个byte;
float占据的内存大小是4 个byte;
double占据的内存大小是8 个byte;
char占据的内存大小是1 个byte。

具体可以用sizeof测试一下即可。
---------------------
作者:wfreehorse
来源:CSDN
原文:https://blog.csdn.net/wfreehorse/article/details/60589326
版权声明:本文为博主原创文章,转载请附上博文链接!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 16:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表