c语言防止缓冲区数据作为有效字符被读入
生活随笔
收集整理的這篇文章主要介紹了
c语言防止缓冲区数据作为有效字符被读入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
常見的防止將數據輸入時存入緩沖區中的回車符讀入下一個字符變量的方法是
1.用函數getchar()將回車符先讀入,防止成為下一個字符型變量的有效字符。
2.在%c前面加一個空格,忽略前面數據輸入時存入緩沖區中的回車符,避免被后面的字符型變量當成有效字符讀入。
int main(){int a;char b;printf("Please input an integer:");scanf("%d",&a);printf("intnger:%d",a);getchar();//將存于緩沖區中的回車符讀入,避免在后面作為有效字符讀入printf("Please input a char:");scanf("%c",&c);//或者使用scanf(" %c",&c);效果與getchar()一樣printf("char=%c\n",c);
} 當我們需要連續從鍵盤鍵入兩個字符型數組的時候,為了防止緩沖區溢出,我們使用了安全函數 char *fgets(char *s,int n,stdin)。但是出現問題。下面的代碼就是初始代碼,
#include<stdio.h>
#include<stdlib.h>int main(int argc,char *argv[]){char str[10];char str2[10];char c;printf("請輸入str:");fgets(str,10,stdin);printf("請輸入str2:");fgets(str2,10,stdin);printf("str=%s\n",str);printf("str2=%s\n",str2);return 0;
運行之后發現
結果: 請輸入str:abcdefghjklmn 請輸入str2:str=abcdefghj str2=klmn 然而這并不是我們所需要的結果,str2數組將緩沖區中str沒有讀完的數據當成有效字符讀入了,這就讓我們無法鍵入str2的值,因此為了解決這個問題。讓我們能夠正常鍵入第二個變量。于是有了改進版: #include<stdio.h> #define N 10 int main(int argc,char *argv[]){char str[N];char str2[N];char c;printf("請輸入str:");fgets(str,10,stdin);while((c=getchar())!='\n'&&c!=EOF); //清空輸出流clearerr(stdin);// 清楚流的錯誤標記printf("請輸入str2:");fgets(str2,10,stdin);printf("str=%s\n",str);printf("str2=%s\n",str2);return 0; }運行結果
請輸入str:abcdefghijklmn 請輸入str2:abcdefghijklmn str=abcdefghi str2=abcdefghi轉載于:https://www.cnblogs.com/cmustard/p/6769950.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的c语言防止缓冲区数据作为有效字符被读入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ3068 : 小白树
- 下一篇: 尖子生星际旅行打不开