問題:我一直在嘗試從用戶獲取字符作為輸入,并使用scanf()c 中的函式將其存盤在字符陣列中,但在陣列的索引 0 處沒有存盤值。我不明白為什么會這樣。這是我正在使用的代碼,
#include<stdio.h>
int main()
{
int n,i;
printf("Enter number of characters to store: ");
scanf("%d", &n); //length of character array
char ch_arr[n 1];
printf("Enter the string: ");
for(i=0;i<n 1;i ){
scanf("%c",&ch_arr[i]); //get characters from user
}
printf("You have entered: \n");
for(i=0;i<n 1;i ){
printf("Index %d = %c\n",i,ch_arr[i]); //print the character array
}
printf("\nThe character at index 2 is =%c",ch_arr[2]);
}
上述代碼的輸出是
Enter number of characters to store: 5
Enter the string: stack
You have entered:
Index 0=
Index 1= s
Index 2= t
Index 3= a
Index 4= c
Index 5= k
The character at index 2 is =t
索引 2 處的字符應該是. 索引 0 處沒有值存盤。任何人都可以解釋為什么會發生這種情況以及如何在不使用其他方式獲取輸入等的情況下解決這個問題gets()。
uj5u.com熱心網友回復:
'\n'陣列存盤此 scanf 呼叫后存盤在緩沖區中的換行符
scanf("%d", &n);
對應于按下的 Enter 鍵。從輸出中可以看出。
例如,您可以撰寫此呼叫
scanf("%d%*c", &n);
另一種方法是通過以下方式更改回圈
for(i=0; i< n 1;i ){
scanf(i == 0 ? " %c" ? "%c",&ch_arr[i]); //get characters from user
}
或者如果你想在陣列中存盤一個字串然后寫
size_t i = 0;
for( ; i < n; i ){
scanf(i == 0 ? " %c" ? "%c",&ch_arr[i]); //get characters from user
}
ch_arr[i] = '\0';
或者,如果您不想輸入帶有嵌入空格的序列,那么您可以撰寫scanf更簡單的呼叫
size_t i = 0;
for( ; i < n; i ){
scanf( " %c",&ch_arr[i]); //get characters from user
}
ch_arr[i] = '\0';
注意格式字串中的前導空格。它允許跳過空白字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/486398.html
下一篇:添加轉換后物件不渲染
