如何在循环中使用fgets?

Ton*_*jan 1 c string loops for-loop fgets

我想在这里使用一个循环.但我的第二个fgets不能正常工作!
在第一个循环中它没关系!但在那之后它会跳过它的第二个fgets!
怎么解决?
谢谢

#include<stdio.h>
#include<string.h>
int main (void)
{
char first_line[1000];
char second_line[2];
int i,n,j,k;
int count=0,flag=0;
scanf("%d ",&k);
for(int m=0; m<k; m++)
{
    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++;
        }
    }
    first_line[strlen(first_line)-1] = '\0';
    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]);
    count=0;
    flag=0;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 6

问题是数组second_line被声明为只有两个元素.

char second_line[2];
Run Code Online (Sandbox Code Playgroud)

因此在这个电话之后

fgets(second_line, 2, stdin);
Run Code Online (Sandbox Code Playgroud)

它无法容纳仍将在输入缓冲区中的新行字符.并且fgets由于输入缓冲区中存在新行字符,第一次调用读取空字符串.

至少你应该写

char second_line[3];

//...

fgets(second_line, sizeof( second_line ), stdin);
Run Code Online (Sandbox Code Playgroud)

考虑到通常这种从字符串中删除新行字符的方法是错误的

first_line[strlen(first_line)-1] = '\0';
Run Code Online (Sandbox Code Playgroud)

因为字符串确实不必包含新行字符.

而是写

first_line[ strcspn( first_line, "\n" ) ] = '\0';
Run Code Online (Sandbox Code Playgroud)