2013-10-12 20 views
1

我想填充一個字符數組,但由於某種原因,每次我點擊輸入它將換行輸入到數組中,這意味着我的數組的一半是LF。我試圖做fflush,但似乎沒有工作。爲什麼我的一半char數組空白?

#include <stdio.h> 
#include <stdlib.h> 

void bubbleSortChar(char arr[], int size); 
//The instruction say to get ch *then* call binarySearchCh, so I think you 
//have to add a field. 
void binarySearchCh(char arr[], int size,char val,int findall); 

main() 
{ 
    char chArray[100]; 
    char ch; 
    int i = -1; 


    while(++i<100 && scanf("%c",&chArray[i])) 
     fflush(stdin); 

    bubbleSortChar(chArray,100); 

    fflush(stdin); 
    printf("Enter a char to find."); 
    scanf("%c",&ch); 

    binarySearchCh(chArray,100,ch,1); 


}  

有沒有辦法做到這一點,而無需每次手動刪除空白?我可以這樣做,但似乎fflush應該照顧這一點。這是一個介紹課程,所以它不應該那麼困難。

+0

避免使用'main'。改用int main(void)。 – haccks

+0

用'',你的意思是回車?這聽起來像你的終端正在做舊的CrLf廢話,線緩衝不知道CrLf序列是用來表示行尾。 MacOS(經典),Windows和Linux都有不同的想法[end-of-line](http://en.wikipedia.org/wiki/Newline)應該被指定。 –

+2

如果你不在Windows上,'fflush(stdin)'是未定義的行爲(並且可能不會清除輸入緩衝區)。 –

回答

3

發生之前%c符空格吃起來\n字符(<Return>)由scanf留下的while環路上按每次輸入。 更改

while(++i<100 && scanf("%c",&chArray[i])) 

while(++i<100 && scanf(" %c",&chArray[i])) 

而且fflush(stdin);調用,如果你不是在MS-DOS未定義行爲。


根據OP的評論;

如果我在命令提示符下怎麼辦?就我而言,這就是我用tkinter的原因,所以我認爲它與C相同。我想實際上在那裏放置的是ASCII碼10,它是換行符。 <Return>LF有何區別?

不同的操作系統有不同的理解新行的方式。 Mac只能理解\r作爲新行,而UnixLinux理解\n作爲新行字符。 AFAIK,Windows需要兩個字符一起解釋爲新行,即\r\n(我不確定)。 這就是爲什麼在一個操作系統中創建的文件在另一個操作系統中無法正常打開並使其變得混亂的原因

+0

這是做什麼用的? – JFA

+0

更新了我的答案。 – haccks

+0

謝謝。如果我不是專門在DOS下,或者一般Windows,它會調用未定義的行爲? – JFA

相關問題