所以我的目标是在功能内部使用菜单选项作为输入
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)
请帮忙。我把头发撕掉了。
答案 0 :(得分:1)
char temp;
scanf("%d", &temp);
temp
是一个字符(1个字节),但是你试图读取一个整数(可能是4或8个字节)?这种未定义的行为很可能导致崩溃。
答案 1 :(得分:-1)
变量声明可能是错误的。 在创建结构时,您必须使用向量1,向量2而不是Vect。而且你还没有在这段代码中使用它。那你为什么创造呢?