hickttye 发表于 2019-4-18 23:26:38

函数问题

#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会错误

82457097 发表于 2019-4-19 07:37:18

类型不是么对上吗 定义的int 输入强制转换为float 分配的内存不够啊

tianyuan 发表于 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;
}

hickttye 发表于 2019-4-20 23:20:35

本帖最后由 hickttye 于 2019-4-20 23:22 编辑

最后一个,char类型在系统中不也是一个int类型吗,用int类型不是更为准确吗?

tianyuan 发表于 2019-4-20 23:35:39

char和int在内存中占用的字节大小是不一样的!我偷下懒直接把别人资料给贴过来了{:10_257:}
---------------------

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
版权声明:本文为博主原创文章,转载请附上博文链接!
页: [1]
查看完整版本: 函数问题