2014-02-07 78 views
0

對不起,一個愚蠢的問題,但這真的開始困擾着我。不能讀取輸入行C

我需要從控制檯取一行輸入。這是相關的代碼片段:

int number_read=0; 
char line[80]; 

printf("Enter register address: "); 
number_read = scanf("%s\n", line); 
printf("number of characters entered: %d; characters entered: %s.\n", number_read, line); 
if (number_read > 0) { 
    <read some registers and display the results.> 
} 

它不起作用。打印「輸入寄存器地址」行,光標停在行的末尾,當我按下Enter時移動到下一行,但是沒有其他事情發生。我試着更換的fscanf scanf()的(標準輸入,...),用於fgets(標準輸入),獲取,GNU的函數getline(),很短的函數,做同樣的事情,與診斷:

char *new_line, ch; 
for(;;) { 
    ch = fgetc(stdin); 
    if(ch == EOF) break; 
    if((*line++ = ch) == '\n') break; 
    printf("Line so far: %s\n", line); 
} 
*line='\0'; 

我得到了所有人的同樣答覆。我包含了所有必需的標題。

我在一個Windows XP的盒子上,用gcc 3.4.5(mingw)編譯。

任何人都可以看到我做錯了什麼?

+0

remove從scanf函數,將工作 – user2760375

+1

可編譯的例子可能是有幫助的「\ n」,有機會,這個問題是不是你認爲它是。 –

+0

感謝user2760375,但它沒有區別。 – user3282703

回答

0

在scanf函數,你應該使用%i來代表一個INT因此,與

scanf("%I", number_line); 
+0

謝謝安東尼奧,但我希望輸入是一個char *(實際上是一個字符數組),而不是一個int。 – user3282703

+0

呃確定抱歉誤會您的問題。 –

+0

number_read = read(STDIN_FILENO,(void *)line,sizeof line);它將工作,但只在linux – user2760375

0

嘗試下面的代碼將作品,

char buff_msg[1024]; 
while(1) 
{ 
    if(fgets(buff_msg,1024, stdin) != NULL){ 
     printf("%s\n", buff_msg); 

     memset(buff_msg, 0, 1024); // you will need this line 
    } 

} 

可以 打破自己的條件循環

0

嘗試讀取()它在MinGW中取代

number_read = scanf("%s\n", line); 

與此也包括#include<unistd.h>

number_read = read(STDIN_FILENO, (void *)line,sizeof line); 
0

值scanf的返回不在元件讀取的數串的數目(在此情況下meybe 1)。

使用%n獲取數字,如所需。

scanf("%s%n", line, &number_read); 
printf("number of characters entered: %d; characters entered: %s.\n", number_read, line);