如果用戶輸入的數字多于陣列的最大值,我想知道如何發出錯誤訊息。(用戶輸入的數字應該在同一行)
#include <stdio.h>
#define N 10
int main() {
int arr[10];
int i;
printf("Please enter %d numers\n", N);
for (i=0; i<N; i) {
scanf(" %d", &arr[i]);
}
for (i=0; i<N; i) {
printf("%d ", arr[i]);
}
return 0;
}
例如,在我撰寫的代碼中,該代碼將忽略超過 10 個數字,但我想知道如何進行錯誤訊息。(如果他輸入的數字比我想要的少,是一樣的嗎?)
換句話說,我怎么知道用戶輸入了多少個數字?
uj5u.com熱心網友回復:
使用該函式的問題scanf是它會忽略空白字符。由于換行符是空白字符,這意味著scanf將忽略任何換行符。因此,如果您想強制輸入的所有數字都在同一行,那么您不應該使用該函式scanf。
為了讀取單行輸入,我建議您使用函式fgets. 讀取一行輸入后,您可以使用該函式strtol嘗試將字符轉換為數字。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define N 10
int main( void )
{
int arr[N];
char line[500], *p;
//prompt user for input
printf( "Please enter %d numbers: ", N );
//attempt to read one line of input
if ( fgets( line, sizeof line, stdin ) == NULL )
{
fprintf( stderr, "Input error!\n" );
exit( EXIT_FAILURE );
}
//attempt to read 10 numbers
p = line;
for ( int i = 0; i < N; i )
{
char *q;
arr[i] = strtol( p, &q, 10 );
if ( q == p )
{
printf( "Error converting #%d!\n", i 1 );
exit( EXIT_FAILURE );
}
p = q;
}
//verify that the remainder of the line contains nothing
//except whitespace characters
for ( ; *p != '\0'; p )
{
if ( !isspace( (unsigned char)*p ) )
{
printf( "Error: Non-whitespace character found after 10th number!\n" );
exit( EXIT_FAILURE );
}
}
//print results
for ( int i = 0; i < N; i )
{
printf( "%d ", arr[i] );
}
return 0;
}
該程式具有以下行為:
Please enter 10 numbers: 1 2 3 4 5
Error converting #6!
Please enter 10 numbers: 1 2 3 4 5 6 7 8 9 10 11
Error: Non-whitespace character found after 10th number!
Please enter 10 numbers: 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
請注意,我上面的代碼存在以下問題:
它不會檢查該行是否太長而無法放入輸入緩沖區(即超過 500 個字符)。
它不會檢查用戶輸入的數字是否可以表示為
int(即是否大于INT_MAX,在大多數平臺上為 2,147,483,647)。
如果你也想解決這些問題,那我建議你看看我get_int_from_user在這個對另一個問題的回答中的功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485107.html
標籤:C
下一篇:在C中匯入Python模塊
