以下のコードを理解するのを手伝ってください。この関数get_digit
は、アドレスごとに文字引数を取ります。ここで何をするのかわかり
scanf("%1[0123456789]", ch)
ません。
端末に1234を指定すると、最初の桁だけが使用されます。私が2345を与える場合も同じです。2がかかります。私はそのような使用法に出くわしたことがありませんscanf
。この機能を理解するのを手伝ってください。
int get_digit ( char *ch )
{
int rc;
printf ( "Enter a single digit: " );
fflush ( stdout );
if ( rc = scanf ( "%1[0123456789]", ch ) == 1 ) {
jsw_flush();
}
return rc;
}
void jsw_flush ( void )
{
int ch;
do
ch = getchar();
while ( ch != '\n' && ch != EOF );
clearerr ( stdin );
}
void fill_table ( char table[] )
{
char ch;
while ( get_digit ( &ch ) ) {
unsigned i = ch - '0';
if ( table[i] != 0 ) {
printf ( "That index has been filled\n" );
}
else {
table[i] = ch;
}
}
}
void show_table ( const char table[], size_t size )
{
size_t i;
for ( i = 0; i < size; i++ ) {
printf ( "%c\n", table[i] != 0 ? table[i] : '~' );
}
}