程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void ensure_input( const char* tip, const char* err_tip, int success_num, const char *restrict fmt, ... )
{
while( 1 )
{
printf( "%s", tip );
va_list ap;
va_start( ap, fmt );
int rc = vscanf( fmt, ap );
va_end( ap );
if( rc == -1 )
exit( 1 );
if( rc == success_num )
break;
scanf( "%*[^\n]%*c" );
printf( "%s", err_tip );
}
}
int main( void )
{
size_t num;
ensure_input( "请输入要排序几位数: ", "您的输入有误,请重新输入!\n", 1, "%zu", &num );
int* array = malloc( num * sizeof(*array) );
if( !array )
{
puts( "内存空间不足,退出." );
return 1;
}
printf( "请输入要排序的数:\n" );
for( size_t i=0; i!=num; ++i )
ensure_input( "", "您的输入有误,请重新输入!\n", 1, "%d", &array[i] );
printf( "你输入的数分别是:" );
for( size_t i=0; i!=num; ++i )
printf( "%d%c", array[i], " \n"[i+1==num] );
free( array );
return 0;
}
请输入要排序几位数: fuck
您的输入有误,请重新输入!
请输入要排序几位数: 5
请输入要排序的数:
1
2
bitch
您的输入有误,请重新输入!
3
4
5
你输入的数分别是:1 2 3 4 5