入力した文字列が出力されないのはなぜですか?

プログラミングQA


#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i, types;
    i=0;
    printf("how many types/categories of meds you want?\n");
    scanf(" %d", &types);
    printf(" %d", types);
    char * category[types];

       printf("\nPlease mention the categories of meds like B.P, anxiety, blood thinners,etc:\n\n");

    while( i<types)
       {
         category[i]= malloc(30 * sizeof(char));
         printf("CATEGORY #%d ?\n\n",i+1);
         gets(category);
         getchar();
         i++;
       }

     for ( i=0; i< types ;i++)
     {
         printf(" %s",category[i]);
     }


    return 0;
}

私が試したこと:

ヒープメモリを使用しましたが、これが機能しない理由と解決策を誰かが説明できますか?

gets を使用してこれをまったく機能させることができませんでした。実際、使用しないようにというコンパイラの警告が表示されました。 ただし、gets の構文は次のとおりです。

char *gets(char *str)

そして、あなたはそれを渡しています char **str

交換してみる

gets(category);

scanf("%s", category[i]);

試す

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CHARS 30

int main()
{
  int c, categories;
  printf("how many types/categories of meds you want?\n");
  scanf(" %d", &categories);
  printf(" %d", categories);
  char * category[categories];

  printf("\nPlease mention the categories of meds like B.P, anxiety, blood thinners,etc:\n\n");



  for( c = 0; c < categories; ++c)
  {
    unsigned long len = 0;
    category[c]= malloc(CHARS * sizeof(char));
    printf("CATEGORY #%d ?\n\n", (c+1));

    while (len < 2)
    {
      fgets(category[c], CHARS, stdin);
      len = strlen(category[c]);
    }
  }

  for ( c = 0; c < categories ; ++c)
    printf(" %s", category[c]);

  for ( c = 0; c < categories; ++c)
    free(category[c]);

  return 0;
}

2 つの問題があります。
1 scanf を使用して値を読み取ると、入力バッファーに行末が残り、次の入力コマンドが間違ったデータを読み取る原因になります。 への呼び出し後にバッファをクリアする必要があります scanf:

C++
char dummy[4];
gets(dummy);

2. 薬の詳細を読むと、バッファ アドレスのオフセットがありません。

C++
gets(category); // should be          gets(category[i]);



Source link

コメント

タイトルとURLをコピーしました