0
ポインタを使用して構造体を読み書きするコードを以下に書きました。アプリケーションはデータを印刷していますが、後でクラッシュします。どこか愚かな間違いであるようだ。正確な問題を見つけることができません。 printStructで値渡しを使用し、readStructで構造体を返そうとしました。問題はありません。ポインタを使用すると何がうまくいかないのか分かりません。アプリケーションポインタを使用して構造体を印刷するとクラッシュする
#include<stdio.h>
#include <inttypes.h>
#include <string.h>
struct student{
char USN[10];
char name[50];
char gender;
uint8_t age;
};
void printStruct (struct student*);
void readStruct(struct student*);
int main() {
uint8_t numStudents;
printf("Enter number of students\n");
scanf("%d",&numStudents);
struct student firstSemStudent[numStudents];
readStruct(firstSemStudent+0);
printStruct(firstSemStudent+0);
return 0;
}
void printStruct (struct student *var1)
{
printf("USN= %s\n",var1->USN);
printf("Name = %s\n",var1->name);
printf("Age = %d\n",var1->age);
printf("Gender = %c\n",var1->gender);
}
void readStruct(struct student *temp)
{
printf("\nEnter USN: ");
fflush(stdin);
gets(temp->USN);
printf("\nEnter Name: ");
fflush(stdin);
gets(temp->name);
printf("\nEnter age\n");
scanf("%d",&temp->age);
printf("\nEnter the Gender as M/F");
fflush(stdin);
scanf("%c",&temp->gender);
}
fflush()以外の問題を修正した後で動作します。しかし、私の質問は:gets()とfflush()が動作しないのはなぜですか?どのようにそのような問題を知る必要がありますか?また、fflushを使わないとScanfも問題を引き起こします。私は本当にstdinから読むための最善の方法は混乱している?また、uint8_tのデータを読み取るにはどうすればよいですか?私はintまたはshort intに行きたくないと仮定します。 – Rajesh
@Rajesh最良の方法は 'fgets()'、IMHOを使うことです。あなたの都合に合わせて、読んで、解析してください。 –
unsigned charの書式指定子はどうですか?私はそこにいるとは思わない。 %cを使わずに8ビット値を読み取るにはどうすればよいですか?また、uint8_t、uint16_tなどは、アーキテクチャに依存しないため、変数を宣言する標準的な方法です。すべてのコメント! – Rajesh