私の C コードに問題があります。助けていただければ幸いです。プログラムは基本的な本「データベース」を作ることです。次のコードを (Xcode で) 実行すると、次の文がスキップされる理由がわかりません。
gets(名前[i]);
メニューからオプション1を選択すると、端末では次のように直接出力されます。
Bienvenido al catalogo de libros.
Catalogo de tarjetas: 1. イントロデューサー 2. 作者の検索 3. タイトルの検索 4. Salir
Elija opcion:1 警告: このプログラムは gets() を使用していますが、これは安全ではありません。
Introduzca el nombre del libro:Introduzca el autor del libro:
わかりましたので、scanf("%d", &opcion); をテストしました。printf("%d", オプション) の使用; scanf が私の入力を正しく読み取ることを証明する直後。驚いたことに、私が導入したオプションを正しく読み取ります。さらに、gets(nombre[i]) が機能するかどうかを確認するために、「\n」を使用せずにプログラムを実行しようとしましたが、それでもジャンプします...
何か案は?
これは完全なコードです (長くはありません):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#define MAX 100
char nombre[MAX][20];
char autor[MAX][20];
char edit[MAX][20];
char buscar[20];
char buscar_t[20];
char buscar_a[20];
int opcion,i,j,k,l;
void menu(void);
void intro(void);
void buscar_autor(void);
void buscar_tit(void);
void salir(void);
void main(void)
{
printf("Bienvenido al catalogo de libros. \n");
menu();
}
void menu(void)
{
printf("\n Catalogo de tarjetas:");
printf("\n 1. Introducir");
printf("\n 2. Buscar por autor");
printf("\n 3. Buscar por titulo");
printf("\n 4. Salir");
printf("\n Elija opcion:");
scanf("%d", &opcion);
switch (opcion) {
case 1:
intro();
break;
case 2:
buscar_autor();
break;
case 3:
buscar_tit();
break;
case 4:
salir();
break;
}
}
void intro(void)
{
for (i=0; i<MAX; i++)
{
printf("Introduzca el nombre del libro:");
gets(nombre[i]);
if (!strcmp(nombre[i],"salir"))
{
break;
}
printf("Introduzca el autor del libro:");
gets(autor[i]);
printf("Introduzca la editorial del libro:");
gets(edit[i]);
}
menu();
}
void buscar_tit(void)
{
printf("Introduzca el titulo del libro que quiera buscar:");
gets(buscar_t);
for (j=0; j<MAX+1; j++)
{
if (!strcmp(nombre[j],buscar_t))
{
printf("El libro se ha encontrado, el titulo es %s. ", nombre[j]);
break;
}
if (j=MAX)
{
printf("El libro no se ha encontrado.");
break;
}
}
}
void buscar_autor(void)
{
printf("Introduzca el autor del libro que quiera buscar:");
gets(buscar_a);
for (k=0; k<MAX+1; k++)
{
if (!strcmp(autor[k],buscar_a))
{
printf("El libro se ha encontrado, el titulo es %s. ", nombre[k]);
break;
}
if (k=MAX)
{
printf("El autor no se ha encontrado.");
break;
}
}
}
void salir(void)
{
printf("Muchisimas gracias por usar el catalogo de libros. \n");
}
エラーを理解するのを手伝ってくれることを願っています。
みんなありがとう。