C语言中关于字符数组输入,scanf没执行
生活随笔
收集整理的這篇文章主要介紹了
C语言中关于字符数组输入,scanf没执行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:有時C語言中關于字符數組輸入,有的scanf語句沒執行。
未執行scanf的代碼:
#include<stdio.h> int main() {int n;int t=0;scanf("%d",&n);char arr[n];int i;for(i=0;i<n;i++){scanf("%c",&arr[i]);}printf("%c\n",arr[0]);for(i=0;i<n;i++){if(arr[i]=='L'){t=t+1;}else if(arr[i]=='R'){t=t-1;}}printf("%d\n",t); }可以觀察到,arr[0]并未存入字符,t的數值比預期少1
原因:這種情況通常發生在前面已經有了輸入語句,而當前的scanf是在接收字符(即用%c控制輸入)時。由于前面的輸入語句(不一定是scanf)把最后輸入的'\n'遺留在了輸入緩沖區,而當前的scanf("%c",...);又會把'\n'當一個字符接收,又由于scanf在%c控制下只接收一個字符,所以就不能接收正式輸入的字符了。解決這一問題的最簡單辦法是在接收字符的scanf的控制符"%c"中的%前加一個空格寫成" %c",把前一次輸入遺留在輸入緩沖區里的所有廣義空格(' '、'\t'、'\n'等)都吸收掉。在接收字符的scanf前加getchar()等的辦法其實是有漏洞的——當緩沖區里只遺留了一個廣義字符時可正常工作,若多于一個則同樣出錯。
改正錯誤之后的代碼:
#include<stdio.h> int main() {int n;int t=0;scanf("%d",&n);char arr[n];int i;for(i=0;i<n;i++){scanf(" %c",&arr[i]);}printf("%c\n",arr[0]);for(i=0;i<n;i++){if(arr[i]=='L'){t=t+1;}else if(arr[i]=='R'){t=t-1;}}printf("%d\n",t); }將scanf中的%c變為空格+%c,得到預期結果。
總結
以上是生活随笔為你收集整理的C语言中关于字符数组输入,scanf没执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题63:股票的最大
- 下一篇: 【剑指offer】面试题48. 最长不含