gpt4 book ai didi

c - C 编程中的 typedef struct 和 char

转载 作者:行者123 更新时间:2023-11-30 14:47:58 24 4
gpt4 key购买 nike

我发现自己在一段无法按我希望的方式工作的代码上停留了几分钟。事实上,我想将一个字符插入到包含字符数组的结构中。

以下是代码片段“automates.h”的摘录:

void ajouterCaractere(Automate *automate) {
if(automate->nbre_caracteres >= MAX_CARACTERES){
printf("Vous avez deja atteint le nombre de caracteres maximal pour l'alphabet de votre automate !\n");
}
else {
printf("Veuillez inserer un caractere dans alphabet :\n");
scanf("%c",&automate->alphabet[automate->nbre_caracteres]);
automate->nbre_caracteres++;
}
}

// Remplir les états
void ajouterEtat(Automate *automate) {
if (automate->nbre_etats >= MAX_ETATS) {
printf("Vous avez deja atteint le nombre d'etats maximal pour votre automate !\n");
}
else {
printf("Veuillez inserer un etat de votre automate :\n");
scanf("%d", &automate->tableau_Etat[automate->nbre_etats]);
automate->nbre_etats++;
}
}

// Remplir les états initiaux
void ajouterEtatInitial(Automate *automate) {
if (automate->nbre_etats_initiaux >= MAX_ETATS_INITIAUX) {
printf("Vous avez deja atteint le nombre d'etats initiaux maximal pour votre automate !\n");
}
else {
printf("Veuillez inserer les etats initiaux de votre automate :\n");
scanf("%d",&automate->tableau_EI[automate->nbre_etats_initiaux]);
automate->nbre_etats_initiaux++;
}
}

// Remplir les états finaux
void ajouterEtatFinal(Automate *automate) {
if (automate->nbre_etats_finaux >= MAX_ETATS_FINAUX) {
printf("Vous avez deja atteint le nombre d'etats finaux maximal pour votre automate !\n");
}
else {
printf("Veuillez inserer les etats finaux de votre automate :\n");
scanf("%d",&automate->tableau_EF[automate->nbre_etats_finaux]);
automate->nbre_etats_finaux++;
}
}

// Remplir les transitions
void ajouterTransition(Automate *automate) {
Transition transition;
int i;

if (automate->nbre_transitions >= MAX_TRANSITIONS) {
printf("Vous avez deja atteint le nombre de transition maximal pour votre automate !\n");
}
else {
printf("Transition %d\n", automate->nbre_transitions+1);
printf("\t Etat de depart : "); /* L'état de départ de la transition */
scanf("%d", &transition.etat_depart);
printf("\t Etiquette : "); /* L'étiquette de la transition */
scanf("%c", &transition.etiquette);
printf("\t Etat d'arrive : "); /* L'état d'arrivé de la transition */
scanf("%d", &transition.etat_final);

automate->tableau_transition[automate->nbre_transitions] = transition;
automate->nbre_transitions++;
}
}

这是我的 main.c :

Automate *automate;
int choix;

automate = (Automate *) malloc (sizeof(Automate));
if (automate == NULL)
printf("Erreur lors de l'allocation de la mémoire à l'automate !\n");

initialisation(automate);
//consigne();
while(choix != 6) {
choix = menu(automate);
switch(choix) {
case 1:
ajouterCaractere(automate);
break;
case 2:
ajouterEtat(automate);
break;
case 3:
ajouterEtatInitial(automate);
break;
case 4:
ajouterEtatFinal(automate);
break;
case 5:
ajouterTransition(automate);
break;
default :
printf("Faites un choix correcte !");
break;
}
}

当我编译时我得到这个:

******** MENU ********
1. Ajouter un caractere dans l'alphabet
2. Quitter !
Faites votre choix :
1
Veuillez inserer un caractere dans alphabet :

******** MENU ********
1. Ajouter un caractere
2. Ajouter un etat
3. Ajouter un etat initial
4. Ajouter un etat final
5. Ajouter une transition
6. Quitter
Faites votre choix :

如您所见,当我输入 1 时,它不允许在表格中插入字符。

如何解决这个问题?

提前谢谢您!

最佳答案

menu() 函数可能不会在选择菜单后读取换行符。修复该函数,或者更改 scanf() 格式字符串以跳过字符之前的空格。

        scanf(" %c",&automate->alphabet[automate->nbre_caracteres]);

您应该对使用 %c 的所有其他 scanf() 操作执行相同的操作。

更好的选择可能是使用 fgets() 将整行读取为字符串,而不是使用 scanf() 读取用户输入。您可以使用 sscanf() 解析输入行。

关于c - C 编程中的 typedef struct 和 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com