Nar*_*xus 1 c switch-statement
好的,所以我正在为某些东西编写代码,我在测试开关功能时遇到了问题.它完成了从一个人的选择中增加的所有情况(我的解释).有人可以帮我解释一下为什么会这样吗?
#include <stdio.h>
#include <stdlib.h>
#include "ratedzfunctions.h"
int main()
{
int selection, loop=1;
FILE* fajl;
//Opening the participants file
fajl=fopen("participants.txt","r+");
if (fajl==NULL)
{
printf("The file cannot be opened.\n");
}
//MENU
do
{
printf("\nMENU: \n------------\n1. RATEDZ\n\n2. STATISTICS\n\n3. EXIT\n\n==>");
scanf("%d", &selection);
switch (selection)
{
case 1:
ratedz(fajl);
case 2:
stats(fajl);
case 3:
loop=0;
}
}
while (loop==1);
fclose(fajl);
return 0;
}
//THIS IS FROM RATEDZFUNCTIONS.H
void ratedz(FILE *fajl)
{
printf("\nTEST RATEDZ");
}
void stats(FILE *fajl)
{
//Printing all participants
char *buffer=(char*) malloc(50);
while(fscanf(fajl,"%s %s %s", buffer)!=EOF)
{
printf("\n%s %s %s", buffer);
}
free(buffer);
}
Run Code Online (Sandbox Code Playgroud)
你忘了break;在每个之后添加一个声明case.
case 2:
stats(fajl);
break; /* <---- */
Run Code Online (Sandbox Code Playgroud)
你应该在break;每个后面加上一个case.
规则switch/case很简单,在匹配一个 case 后,以下所有 case 都将被执行,直到 abreak;或 end switch:
switch (selection)
{
case 1:
...
break;
case 2:
...
break;
case 3:
...
break; // Last break is not necessary
// but it's good practice to put it.
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,删除break;是合理的:
switch(letter)
{
case 'i':
case 'a':
case 'o':
case 'u':
case 'e':
printf ("Vowel!");
break;
default :
printf ("Consonant!");
break;
}
Run Code Online (Sandbox Code Playgroud)