2017-05-04 3 views
1

ここに私のコードです。ここに私の望ましい出力があります:プリントカウント値の前に新しい行が表示されるのはなぜですか?

Occurrence of 'l' in Hello world = 3 

しかし、私はこんにちは世界の後に新しい行を得ています。どうすればこの問題を解決できますか? C標準関数fgetsの説明によれば

#include<stdio.h> 
#include<string.h> 
int main (void){ 
    char first_line[1000]; 
    char second_line[2]; 
    int i,n,j; 
    int count=0,flag=0; 
    fgets(first_line, 1000, stdin); 
    fgets(second_line, 2, stdin); 
    for(i=0; i<strlen(first_line); i++) 
    { 
     if(second_line[0]==first_line[i]) 
     { 
      flag=1; 
      count++; 
     } 
    } 
    if(flag==1) 
     printf("Occurrence of '%c' in %s = %d",second_line[0],first_line,count); 

    else 
     printf("%c isn't present",second_line[0]); 

    return 0; 
} 
+2

のために書くことができ改行文字を削除するには( 'fgets'がそれを行います)。 'first_line [strlen(first_line)-1] = '\ 0''を使用して削除してください。 –

+0

[改行とfgets()に関するクエリの可能な複製](http://stackoverflow.com/questions/22125410/query-regarding改行と改行) –

+2

'char second_line [2];'入力されたchar、改行、および終了する0のために十分ではありません。beanカウントを停止し、配列128または何かを作成してください。 – ThingyWotsit

答えて

2

(7.21.7.2 fgets関数)

2 fgets関数は 文字特異的EDの数によってより多くても1つ少ない読み出しストリームによって指示されたストリームから、nが指し示す 配列に入る。 改行文字(保持されている)の後またはファイルの終わりの後に、追加の文字は読み取られません。 null 文字は最後の文字が配列 に読み込まれた直後に書き込まれます。

あなたは行末を読んでいる例

first_line[ strcspn(first_line, "\n") ] = '\0'; 
+0

ありがとうございます。できます –

関連する問題