生徒の資格情報を入力して印刷するために、次のプログラムを作成しました。しかし、2人の生徒の記録を入力すると(入力可能な最大レコード数)、それは印刷されません。 ここにプログラムがあります。誰かが間違いを指摘できますか?ありがとうございました。構造のメンバーを印刷するには?
#include<stdio.h>
#include<string.h>
struct student
{
char name[20];
char mobile_no[10];
char class[5];
};
int main()
{
static struct student s[2];
int m=0,n=0,i;
char c;
printf("Enter the name , mobile_no and class of the students\n");
while((scanf("%c",&s[m].name[n]))!= EOF)
{
for(n=0; n<=19; n++)
scanf("%c",&s[m].name[n]);
for(n=0; n<=9; n++)
scanf("%c",&s[m].mobile_no[n]);
for(n=0; n<=4; n++)
scanf("%c",&s[m].class[n]);
scanf("%c",&c); //scans for the newline character \n
n = 0;
m++;
}
for(i=0 ; i<m ; i++)
{
printf("%s%3s%3s\n",s[i].name,s[i].mobile_no,s[i].class); //prints the structure
}
}
そして、それは何を印刷しない "それはそれらを印刷していませんか"?あなたは何を入力し、どのような出力を期待していますか?名前が19文字以下の場合はどうしますか? – Gerhardh
空行と適切なインデントをコードに挿入すると、そのコードを読んでいる人の数が大幅に増える可能性があります。 – Gerhardh
データを読み取るために使用されるメカニズムは奇妙です。ユーザは名前の開始前に文字を入力しなければなりません( 'while()'の中の 'scanf()'はそれを読み込みます)、名前には19文字をタイプします。スペースを取らずに、ユーザーは9文字の電話番号を入力する必要があります。スペースを使わずに、クラスの4文字とコードは、改行と見なされるもう1つの文字を読み込みます。このコードでは、文字列のいずれかがNULLで終了することは保証されません。これは多くの理由でそれを行う間違った方法ですが、それは計数だけではありません。 –