2017-04-20 6 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("% "%99 [^ \ n]"、 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をOSから読み込みます。

は、数字の一部ではない改行を見て、そので改行を入力バッファ(stdio内)に残して停止します。 2番目のscanfは、改行ではないものを読み込もうとしますが、それを行うことはできません。最初に目にするのは改行です。 scanf呼び出しの戻り値を確認すると、2番目のscanfがゼロを返していることがわかります。つまり、要求した変換を完了できませんでした。代わりに

fgetsまたはgetlineで、一度にフルラインを読む:長い議論について

#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

関連する問題