2017-04-20 95 views
0

儘管我在scanf("[^\n]s", x)"%34[^\n]"%127s中使用此條件,但我無法正確得到答案。是否存在與scanf區域或其他部分的任何問題....如何用scanf讀取空格

#include <stdio.h> 

int main() 
{ 
    int i = 4; 
    double d = 4.0; 
    char s[] = "hello "; 
    int a; 
    double b; 
    unsigned char string_2[100]; 
    scanf("%d",&a); 
    scanf("%lf",&b); 
    scanf("%[^\n]s",string_2); 
    printf("%d",a+i); 
    printf("\n%lf",d+b); 
    printf("\n%s",s); 
    printf("%s",string_2); 
    return(0); 
} 
+2

'的scanf( 「%LF」,&b); 的scanf(「% [^ \ n] s「,string_2);' - >'scanf(」%lf「,&b); while(getchar()!='\ n'); scanf(」%99 [^ \ n]「, string_2);' – BLUEPIXY

+0

是的,沒有工作的人... awsome ....... – Nivethithan

回答

1

不要使用scanf這樣。

在此:

scanf("%lf",&b); 
scanf("%[^\n]s",string_2); 

第一scanf讀取輸入一個數字,而是需要等待終端先給程序輸入的完整產品線。假設用戶123,所以程序從操作系統讀取123\n

scanf看到不再是該數字的一部分的換行符,並停在離開換行符在輸入緩衝區(在stdio中)。第二個scanf試圖讀取非新行的東西,但不能這樣做,因爲它看到的第一件事是換行符。如果您檢查scanf調用的返回值,則會看到第二個scanf返回零,即無法完成您要求的轉換。

相反,讀滿線的時間,與fgetsgetline

#include <stdio.h> 
int main(void) 
{ 
    char *buf = NULL; 
    size_t n = 0; 
    double f; 
    getline(&buf, &n, stdin); 
    if (sscanf(buf, "%lf", &f) == 1) { 
     printf("you gave the number %lf\n", f); 
    } 
    getline(&buf, &n, stdin); 
    printf("you entered the string: %s\n", buf); 
    return 0; 
} 

對於較長的討論,請參見:http://c-faq.com/stdio/scanfprobs.html