- 此问题在此处已有答案**:
Why can we not declare a variable after a switch case colon without using curly braces?(3个答案)
昨天关门了。
我在编译主文件第17行的代码时遇到了问题。错误是"a label can only be part of a statement and a declaration is not a statement
"。
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#define TAILLE_MAX_NOM 50
// Définition du type Compte
typedef struct {
int RIB;
float solde;
char etat[TAILLE_MAX_NOM];
float plafond_credit;
int nb_operations;
float operations[100];
} Compte;
Compte T_Compte[100];
int menu();
void CreerCompte(Compte *C);
int ChercherCompte(Compte T_Compte[],int NC,int RIB );
void AjouterCompte (Compte T_Compte[], int *NC, Compte C);
float Ajouter_Retirer (Compte T_Compte[], int NC, float M,int RIB);
void ListeComptes(Compte T_Compte[], int NC);
void StatCompte (Compte T_Compte[], int NC, int *PNBA,int *PNBR ,int RIB);
void Prime (Compte T_Compte[], int NC);
#endif // HEADER_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"
int menu() {
int choix;
printf("\n\n -> Menu <- \n\n");
printf(" 1 - Ajouter un Nouveau Compte \n");
printf(" 2 - Afficher les comptes de la banque \n");
printf(" 3 - Ajouter une operation a un compte\n");
printf(" 4 - Attribuer une prime aux meilleurs comptes bancaires \n");
printf(" 0 - Quitte\n");
printf("\n --------------------------------------\n");
do {
printf(" -> Tapez votre choix : ");
scanf("%d",&choix);
printf("\n\n");
} while (choix>4 || choix<0);
return choix;
}
void CreerCompte(Compte *C) {
printf("RIB du compte : ");
scanf("%d", &C->RIB);
printf("Solde initial du compte (supérieur ou égal à 50) : ");
scanf("%f", &C->solde);
while (C->solde < 50) {
printf("Le solde initial doit être supérieur ou égal à 50 !\n");
printf("Solde initial du compte (supérieur ou égal à 50) : ");
scanf("%f", &C->solde);
}
strcpy(C->etat, "debiteur");
printf("Plafond de crédit du compte (strictement négatif supérieur à -500) : ");
scanf("%f", &C->plafond_credit);
while (C->plafond_credit >= 0 || C->plafond_credit <= -500) {
printf("Le plafond de crédit doit être un montant strictement négatif supérieur à -500 !\n");
printf("Plafond de crédit du compte (strictement négatif supérieur à -500) : ");
scanf("%f", &C->plafond_credit);
}
C->nb_operations = 0;
}
int ChercherCompte(Compte T_Compte[], int NC, int RIB) {
for (int i = 0; i < NC; i++) {
if (T_Compte[i].RIB == RIB) {
return i;
}
}
return -1;
}
void AjouterCompte(Compte T_Compte[], int *NC, Compte C) {
if (ChercherCompte(T_Compte, *NC, C.RIB) != -1) {
printf("Un compte avec ce RIB existe déjà !\n");
return;
}
T_Compte[*NC] = C;
(*NC)++;
}
float Ajouter_Retirer(Compte T_Compte[], int NC, float M, int RIB) {
// Vérifie que la somme à ajouter ou retirer est non nulle
if (M == 0) {
printf("La somme à ajouter ou retirer ne peut pas être nulle !\n");
return -1;
}
// Cherche le compte dans le tableau
int pos = ChercherCompte(T_Compte, NC, RIB);
// Vérifie que le compte existe
if (pos == -1) {
printf("Le compte avec le RIB spécifié n'existe pas !\n");
return -1;
}
Compte C = T_Compte[pos];
// Vérifie que l'opération de retrait peut être effectuée
if (M < 0 && (C.solde + M < -C.plafond_credit)) {
printf("Opération de retrait impossible !\n");
return -1;
}
// Effectue l'opération
C.solde += M;
C.nb_operations++;
T_Compte[pos] = C;
return C.solde;
}
void ListeComptes(Compte T_Compte[], int NC) {
printf("Liste des comptes de la banque :\n");
for (int i = 0; i < NC; i++) {
Compte C = T_Compte[i];
printf("RIB : %d, Solde : %.2f, Etat : %s, Plafond de crédit : %.2f, Nombre d'opérations : %d\n",
C.RIB, C.solde, C.etat, C.plafond_credit, C.nb_operations);
}
}void StatCompte(Compte T_Compte[], int NC, int *PNBA, int *PNBR, int RIB) {
// Initialise les compteurs à 0
*PNBA = 0;
*PNBR = 0;
// Cherche le compte dans le tableau
int pos = ChercherCompte(T_Compte, NC, RIB);
if (pos == -1) {
printf("Le compte avec ce RIB n'existe pas !\n");
return;
}
// Parcours les opérations du compte
Compte C = T_Compte[pos];
for (int i = 0; i < C.nb_operations; i++) {
if (C.operations[i] > 0) {
(*PNBA)++;
} else if (C.operations[i] < 0) {
(*PNBR)++;
}
}
}
void Prime(Compte T_Compte[], int NC) {
printf("Attribution de la prime aux meilleurs comptes de la banque :\n");
for (int i = 0; i < NC; i++) {
Compte C = T_Compte[i];
// Vérifie que le compte est débiteur
if (strcmp(C.etat, "debiteur") == 0) {
int nb_ajout = 0;
int nb_retrait = 0;
// Parcours les opérations du compte pour compter le nombre d'opérations d'ajout et de retrait
for (int j = 0; j < C.nb_operations; j++) {
if (C.operations[j] > 0) {
nb_ajout++;
} else if (C.operations[j] < 0) {
nb_retrait++;
}
}
// Vérifie que le nombre d'opérations d'ajout est supérieur aux nombres d'opérations de retrait
if (nb_ajout > nb_retrait) {
float prime = (C.solde / C.nb_operations) * 0.5;
printf("RIB : %d - Prime : %.2f\n", C.RIB, prime);
}
}
}
}
//source file/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"
int main() {
// Initialize the array of accounts
int NC = 0;
// Display the menu and get the user's choice
int choix = menu();
while (choix != 0) {
switch (choix) {
case 1:
Compte C;
getchar();
CreerCompte(&C);
AjouterCompte(T_Compte, &NC, C);
break;
case 2:
// Display the accounts
ListeComptes(T_Compte, NC);
break;
case 3:
// Add or remove money from an account
printf("RIB du compte : ");
int RIB;
scanf("%d", &RIB);
printf("Somme à ajouter ou retirer : ");
float M;
scanf("%f", &M);
float solde = Ajouter_Retirer(T_Compte, NC, M, RIB);
if (solde != -1) {
printf("Nouveau solde : %.2f\n", solde);
}
break;
case 4:
// Attribute a prize to the best accounts
Prime(T_Compte, NC);
break;
}
// Display the menu and get the user's choice again
choix = menu();
}
printf("Au revoir !\n");
return 0;
}
以下是使用4个开关执行以下功能的主要功能:
- 添加新帐户
- 显示银行的帐户
- 向帐户添加操作
- 给最好的帐目颁奖
1条答案
按热度按时间6gpjuf901#
这是17号线吗?
如果是这样,你需要定义变量
C
的作用域,将case 1:
处理程序修改为: