1. c語言緩沖輸入(困擾了我好幾個小時,求大俠賜教)
題目重復......
緩沖輸入問題 常見的是由於GETS 語句引起的 一般就是加一個 getchar(); 把多餘的回車等讀取掉
至於加在什麼地方 需要你自己慢慢體會
這個程序應該可以
while (1)
{
puts ("請輸入第一個字元串:") ;
gets (str1);
puts ("請輸入第二個字元串:") ;
gets (str2) ;
puts ("請輸入數值n:") ;
scanf ("%u", &lenth) ;
fake_strncpy (str1, str2, lenth) ;
puts (str1) ;
getchar();
}
2. c語言緩沖區的問題
目的是要干什麼呢
fflush();和system("pause");沒關系啊
3. C語言里如何設置緩沖區,
很簡單的定義一個數組,用兩個變數下標來指向頭和尾,新數據來尾++ 老數據處理完頭++ 兩個下標超過界限時從頭開始循環利用 中間要考慮緩存數據空和數據滿的情況
或者你動態分配空間,來一個信號分配空間,插入隊列鏈表,處理完一個出隊列,釋放空間
4. C語言中如何清空輸入輸出緩沖區
最簡單的是用fflush()函數。
此函數包含在stdio.h頭文件中,用來強制將緩沖區中的內容寫入文件。
函數原型:int fflush(FILE *stream) ;
函數功能:清除一個流,即清除文件緩沖區.
常用場合:
一、ff(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西列印到標准輸出設備上。
二、scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結 束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。
鍵盤緩沖區就可能有殘余信息問題。
scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中
解決就要在scanf()函數之後加個fflush(stdin)
三、寫文件的時候 不會馬上進行物理磁碟的文件讀寫,而是先寫入緩存,當緩存中內容達到一定程度後再寫
FILE *fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
5. c語言中關於scanf在緩存里讀數據的問題
恩 而且getchar()你也會遇到相同讀字元的問題的 fflush()可以解決 以後可能有點麻煩
你補充說的我查了一下 有點眉目
你說的是先輸入4 然後是回車 再依次輸入+空格1空格2 回車 對吧 第一次輸入時變數正確地得到了賦值 在輸入緩沖區中留有一個回車符號(好像每一個輸入後都會留有至少一個回車符 其他的字元時輸入不正確留下的)
當第二次輸入的時候讀的指針指向回車符 並且滿足第一個要賦值的字元的要求 就將回車符賦值給c
然後檢查整型的值是否有 發現時一個加號輸入錯誤 將返回輸入正確的字元個數 是1
所以while可以執行 就會列印出第一行
接著循環再執行 剩下的就是加號,空格 ,1,空格,2,回車了。然後就會讀取空格 1 和2 了 賦值正確執行後返回賦值符號個數3 while繼續執行(為什麼+和-會讀不出來 我現在也不知道 其他的字元可以用上面的規則做出來)
接著剩下的就是回車 就可以再次讀取鍵盤的數據了 你輸入的是*空格3空格4 結果和上面的分析一樣
6. C語言中,求內存緩沖區的詳細解釋!
緩沖區(Buffer)又稱為緩存(Cache),是內存空間的一部分。也就是說,在內存中預留了一定的存儲空間,用來暫時保存輸入或輸出的數據,這部分預留的空間就叫做緩沖區。
緩沖區根據其對應的是輸入設備還是輸出設備,分為輸入緩沖區和輸出緩沖區。
7. C語言里如何設置緩沖區
將數據以鏈表形式順序存放,新數據總是放在表尾,待處理的數據總是在頭結點下的第一個結點,處理完畢則釋放空間。
#define BufferSize 1024 // 合適的大小你知道的
typedef struct node {
char *buffer;
struct node *next;
}*linkList;
LinkList *InitList() {
LinkList *head;
head = (char *)malloc(size(node));
head->next = NULL:
return head;
}
void AddData(LinkList *head, char *data) { // 將新數據添加到表尾
LinkList *p = head;
LinkList *anode = (char *)malloc(size(node));
anode->buffer = (char *)malloc(size(BufferSize));
strncpy(anode->buffer,data,BufferSize);
anode->next = NULL:
while(p->next) p = p->next;
p->next = anode;
}
void DealData(LinkList *head) {
LinkList *p = head->next;
if(p) {
head->next = p->next;
// p->buffer指向的數據待處理
free(p->buffer); // 處理完畢,釋放空間
free(p);
}
}
8. 單片機c語言緩存定義
#define write 0x00
9. c語言清除緩沖區的數據
while(getchar()!='n'); -- 應當是 while(getchar()!='\n'); 這是不斷循環取字元,直到取到 Enter 鍵時結束循環。作用,清除上面一次輸入時殘留在輸入流中的字元。
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",&a,&b); ret 為成功讀得的數據個數。
清除的緩沖區中的殘留數據: if (ret != 2) fflush(stdin);