从用户定义的函数返回正在破坏我的程序

时间:2018-04-23 10:38:32

标签: c function crash return

所以我的目标是在功能内部使用菜单选项作为输入 getMenuInput();(1-4)并将其返回到main()以与switch case一起使用。这段代码是简化的,但我打算轮询两个向量并对它们执行操作。我不能为我的生活解决为什么它在从函数返回时停止,而没有到达开关盒。我甚至尝试在返回后立即在行中打印文本,但我没有输出。

作为旁注,您只有3次机会输入正确的菜单选项,否则程序退出并输出错误。这个(或者更确切地说,我实现这个的方法)可能成为问题吗?

这是我的代码:

#include <stdio.h>

/* This is a structure to hold the two parts
of the vector in a single variable        */
typedef struct
{
    float x;
    float y;
} vect;

char getMenuInput(void);

int main(void)
{
    /* declaration of variables */
    vect vector1, vector2;
    char menuInput = 0;
    int counter = 0;

    while ((counter < 3) && (menuInput == 0))
    {
        printf("--- Menu ---\n"
           "1 Add two vectors\n"
           "2 Subtract two vectors\n"
           "3 Calculate Euclidian Distance\n"
           "4 Exit the program\n"
           "  Please select an option (1, 2, 3, or 4): ");

        menuInput = getMenuInput();  /* 3 chances */

        switch (menuInput)
        {
            case 1:
            {
                printf("You selected 'Add'\n");
                break;
            }/* Add vectors */

            case 2: 
            {
                printf("You selected 'Subtract'\n");
                break;
            }/* Subtract vectors */

            case 3: 
            {
                printf("You selected 'Euclidian Distance'\n"); 
                break;
            }/* Euc Distance */

            case 4: 
            {
                printf("You selected 'Exit'\n"); 
                break;
            }/* exit */

            default: 
            {
                printf("  >Invalid option!\n");
                menuInput = 0;
                ++counter;
            }
        }
    }
    if (counter == 3)
        printf("Program error - Too many invalid inputs");
    else
        return (0);

        /* Receive the two vectors (float or int, +ve or -ve */
        /* This repeats until they're entered correctly */


        /* Find the solution, operation found in the menu */
        /* Float, 2dp precision */
}

char getMenuInput(void)
{
    char temp;
    scanf("%d", &temp);
    return (temp);
}

我得到的输出是:

--- Menu ---
1 Add two vectors
2 Subtract two vectors
3 Calculate Euclidian Distance
4 Exit the program
  Please select an option (1, 2, 3, or 4): 1

RUN SUCCESSFUL (total time: 870ms)

请帮忙。我把头发撕掉了。

2 个答案:

答案 0 :(得分:1)

char temp;
scanf("%d", &temp);

temp是一个字符(1个字节),但是你试图读取一个整数(可能是4或8个字节)?这种未定义的行为很可能导致崩溃。

答案 1 :(得分:-1)

变量声明可能是错误的。 在创建结构时,您必须使用向量1,向量2而不是Vect。而且你还没有在这段代码中使用它。那你为什么创造呢?