[ad_1]
#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]);
[ad_2]
Source link
コメント