關於C語言fgets函式的問題
C語言中從鍵盤輸入的函式有好幾個,fgets就是其中之一。
今天我用fgets函式寫程式碼時也遇到一個問題:在第一次呼叫fgets函式後程序不會阻塞,而是輸出一個回車鍵,待第二次遇到fgets函式時,程式才阻塞。
經過好長時間的排查,才發現問題所在——在第一次呼叫fgets函式時,輸入緩衝區有內容,導致fgets直接從輸入緩衝區取出了資料進行輸出,就會有上述問題出現。
問題找到了,解決起來就簡單了,只需要在使用fgets之前將輸入緩衝區清空一遍,就可以了。
清空緩衝區的辦法有很多,這裡我為大家提供一個函式及其用法:setbuf(stdin,NULL)
其他的辦法讀者可自行百度一下。
相關推薦
關於C語言fgets函式的問題
C語言中從鍵盤輸入的函式有好幾個,fgets就是其中之一。 今天我用fgets函式寫程式碼時也遇到一個問題:在第一次呼叫fgets函式後程序不會阻塞,而是輸出一個回車鍵,待第二次遇到fgets函式時,程式才阻塞。 經過好長時間的排查,才發現問題所在——在第一次呼叫fget
c語言輸入函式getchar&fgets&scanf&scanf_s
//a)getchar:在鍵盤上輸入一個ASCII碼的文字,返回值得到的是一個數值, //c=getchar等價於scanf("%c",&c);在第一次執行時時阻塞,並等待輸入。 //如果下一次輸入緩衝中有剩餘還未提取的輸入資料,將不阻塞直接提取那些剩餘的資料; //b)fflush(std
c語言gets()函式與它的替代者fgets()函式
在c語言中讀取字串有多種方法,比如scanf() 配合%s使用,但是這種方法只能獲取一個單詞,即遇到空格等空字元就會返回。如果要讀取一行字串,比如: I love BIT 這種情況,scanf()就無能為力了。這時我們最先想到的是用gets()讀取. gets()函式從標準輸入(鍵盤)讀入一行資料,所謂
C語言 trim函式實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //去除尾部空格 char *rtrim(char *str) { if(str == N
C語言中函式宣告、形參、實參
函式原型: 原型prototype是函式的宣告;描述了函式的返回值與引數; 函式原型說明了兩點: 1、該函式的返回值 2、該函式的引數及其型別 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 函式的引數: 引數到底是什
C語言isalpha函式
看程式碼: #include<ctype.h> #include<stdio.h> #include <iostream> using namespace std; int main(void){ char ch; int tot
c 語言 用函式遞迴來實現求 k 的 n 次方
如果求取k的n次方,既可以用普通的方法實現,也可以用函式的遞迴來實現。 函式的遞迴即是自己呼叫自己的函式應用形式,即在main函式下定義一個函式,然後在這個函式內自己為了實現某個目的,函式
用C語言探究函式遞迴的巧妙之處(以斐波那契數列為例)
對於許多C語言的初學者來說,函式是一個比較重要的版塊.函式的使用不僅在學習程式設計的時期可以方便我們解決一些問題.它在未來的工作中也是程式設計師們經常運用的東西.而函式的遞迴是函式這一版塊比較難懂的東西.因此小編以輸出斐波那契數列的第N項為例,來探討函式的遞迴的應用給我們的程式碼帶來的方便.
C語言 strrev函式
標頭檔案:#include<string.h> strrev()函式將字串逆置,其原型為: char *strrev(char *str); 【引數說明】str為要逆置的字串。 strrev()將str所指的字串逆置。 【返回值】返回指向逆置後的字串的指標。 strr
C語言庫函式(侵刪)
1.strlen 標頭檔案:#include <string.h> strlen()函式用來計算字串的長度,其原型為:unsigned int strlen (char *s); s為指定的字串 #include<stdio.h> #include<
C語言assert函式完全攻略
斷言assert函式,C語言assert函式完全攻略 對於斷言,相信大家都不陌生,大多數程式語言也都有斷言這一特性。簡單地講,斷言就是對某種假設條件進行檢查。在 C 語言中,斷言被定義為巨集的形式(assert(expression)),而不是函式,其原型定義在<assert.h>檔
C語言read函式的那些坑
今天在複習UNIX檔案系統,用到那個read函式,但是無意中卻掉到一個坑裡了,用了一個多小時才找到問題根源,這裡記錄一下。 問題是這樣的:我需要使用read和write函式把鍵盤輸入的資訊複製到輸出。所以我寫了如下程式: #include<stdio.h> #define MAX
linux下的c語言系統函式呼叫
目錄 4.linux下的系統函式的使用 c語言 4.1數學函式的使用 1pow函式 2.exp函式 3.log函式 4.rand()隨機數函式 4.2字元函式的使用 4.3系統時間與日期函式的使用 系統時間 時間間隔 4.4環境控制函式 &nb
Mr.J--C語言頭函式的建立(附嚴薇敏《資料結構》線性表程式碼)
如何正確編寫 C 語言標頭檔案和與之相關聯的 c 源程式檔案 檢視此文章需要有一定的C語言程式設計基礎 首先就要了解它們的各自功能。要理解C 檔案與標頭檔案(即.h)有什麼 不同之處,首先需要弄明白編譯器的工作過程。 一般說來編譯器會做以下幾個過程: 1.預處理階段 2
C語言隨機函式的使用
rand()和srand()應該是初學者最先接觸到的隨機函數了,今天博主就這兩個函式陳述一下自己的理解。 這兩個函式的使用規範如下: /*這是一個模擬擲色子1800次的程式*/ #include <stdlib.h>
C語言中函式指標陣列的初始化和使用
不比多說上一個程式碼,就懂了! 程式碼一: #include <stdio.h> int func(int i) { printf("%d\n",i); return i*i; } int
C語言malloc()函式與calloc()函式的區別
推薦部落格: 推薦部落格:https://blog.csdn.net/ddcodingya/article/details/80452397 推薦部落格:https:https://blog.csdn.net/Hackbuteer1/article/d
C語言 socket函式的簡單運用 29
下面所講的是在Linux系統上用gcc編寫的,Windows好像不能用。 socket是套接字,是用來在網路之間進行資料傳遞的。 在網路中,我們通過一個IP來確定一臺主機,再通過一個port來確定一個進行,而socket就是一個進行。因此:socket = IP + port 網路傳輸的
Linux : C語言pause()函式:讓程序暫停直到訊號出現
C語言pause()函式:讓程序暫停直到訊號出現 相關函式:kill, signal, sleep 標頭檔案:#include <unistd.h> 定義函式:int
C語言:函式中引數的傳值與傳地址
任務程式碼: #include <stdio.h> void swap(int *a ,int *b)//按之前對指標認識,*a代表指標變數a,a儲存的是地址,*a是地址的值。 { //但是可以看到下面傳輸過程中swap(