NULLのヌル文字と新しい行の文字、つまり「\0」と「\n」の概念的な違いと類似点は何ですか。整数と文字の両方のデータ型変数と配列の関連性を説明できますか?
参考までに、2D文字配列を読み書きするプログラムのスニペットの例を示します。
プログラムコード1:
int main()
{
char sort(),stuname(),swap(),(*p)(),(*q)();
int n;
p=stuname;
q=swap;
printf("Let the number of students in the class be \n");
scanf("%d",&n);
fflush(stdin);
sort(p,q,n);
return 0;
}
char sort(p1,q1,n1)
char (*p1)(),(*q1)();
int n1;
{
(*p1)(n1);
(*q1)();
}
char stuname(int nos) // number of students
{
char name[nos][256];
int i,j;
printf("Reading names of %d students started--->\n\n",nos);
name[0][0]='k'; //initialising as non NULL charecter
for(i=0;i<nos;i++) // nos=number of students
{
printf("Give name of student %d\n",i);
for(j=0;j<256;j++)
{
scanf("%c",&name[i][j]);
if(name[i][j]=='\n')
{
name[i][j]='\0';
j=257;
}
}
}
printf("\n\nWriting student names:\n\n");
for(i=0;i<nos;i++)
{
for(j=0;j<256&&name[i][j]!='\0';j++)
{
printf("%c",name[i][j]);
}
printf("\n");
}
}
char swap()
{
printf("Will swap shortly after getting clarity on scanf and %c");
}
上記のコードはうまく機能していますが、わずかな違いで与えられた同じロジックは適切な出力を与えていません。これがコードです
プログラムコード2:
#include<stdio.h>
int main()
{
char sort(),stuname(),swap(),(*p)(),(*q)();
int n;
p=stuname;
q=swap;
printf("Let the number of students in the class be \n");
scanf("%d",&n);
fflush(stdin);
sort(p,q,n);
return 0;
}
char sort(p1,q1,n1)
char (*p1)(),(*q1)();
int n1;
{
(*p1)(n1);
(*q1)();
}
char stuname(int nos) // number of students
{
char name[nos][256];
int i,j;
printf("Reading names of %d students started--->\n\n",nos);
name[0][0]='k'; //initialising as non NULL charecter
for(i=0;i<nos;i++) // nos=number of students
{
printf("Give name of student %d\n",i);
***for(j=0;j<256&&name[i][j]!='\0';j++)***
{
scanf("%c",&name[i][j]);
/*if(name[i][j]=='\n')
{
name[i][j]='\0';
j=257;
}*/
}
}
printf("\n\nWriting student names:\n\n");
for(i=0;i<nos;i++)
{
for(j=0;j<256&&name[i][j]!='\0';j++)
{
printf("%c",name[i][j]);
}
printf("\n");
}
}
char swap()
{
printf("Will swap shortly after getting clarity on scanf and %c");
}
ここで、同じプログラムのもう1つのインスタンスが、以下に示す適切な出力を提供していません。
プログラムコード3:
#include<stdio.h>
int main()
{
char sort(),stuname(),swap(),(*p)(),(*q)();
int n;
p=stuname;
q=swap;
printf("Let the number of students in the class be \n");
scanf("%d",&n);
fflush(stdin);
sort(p,q,n);
return 0;
}
char sort(p1,q1,n1)
char (*p1)(),(*q1)();
int n1;
{
(*p1)(n1);
(*q1)();
}
char stuname(int nos) // number of students
{
char name[nos][256];
int i,j;
printf("Reading names of %d students started--->\n\n",nos);
name[0][0]='k'; //initialising as non NULL charecter
for(i=0;i<nos;i++) // nos=number of students
{
printf("Give name of student %d\n",i);
***for(j=0;j<256&&name[i][j]!='\n';j++)***
{
scanf("%c",&name[i][j]);
/*if(name[i][j]=='\n')
{
name[i][j]='\0';
j=257;
}*/
}
name[i][i]='\0';
}
printf("\n\nWriting student names:\n\n");
for(i=0;i<nos;i++)
{
for(j=0;j<256&&name[i][j]!='\0';j++)
{
printf("%c",name[i][j]);
}
printf("\n");
}
}
char swap()
{
printf("Will swap shortly after getting clarity on scanf and %c");
}
プログラムコード2とプログラムコード3がコード1の期待どおりに機能しないのはなぜですか?