扫描后fget不工作

扫描后fget不工作

#include <stdio.h>#include <string.h>#include <ctype.h>void delspace(char *str);int main() {
    int i, loops;
    char s1[101], s2[101];

    scanf("%d", &loops);

    while (loops--) {
        fgets(s1, 101, stdin);
        fgets(s2, 101, stdin);
        s1[strlen(s1)] = '\0';
        s2[strlen(s2)] = '\0';

        if (s1[0] == '\n' && s2[0] == '\n') {
            printf("YES\n");
            continue;
        }

        delspace(s1);
        delspace(s2);

        for (i = 0; s1[i] != '\0'; i++)
            s1[i] = tolower(s1[i]);

        for (i = 0; s2[i] != '\0'; i++)
            s2[i] = tolower(s2[i]);

        if (strcmp(s1, s2) == 0) {
            printf("YES\n");
        }
        else {
            printf("NO\n");
        }
    }

    return 0;}void delspace(char* str) {
    int i = 0;
    int j = 0;
    char sTmp[strlen(str)];

    while (str[i++] != '\0') {
        if (str[i] != ' ') {
            sTmp[j++] = str[i];
        }
    }
    sTmp[j] = '\0';
    strcpy(str, sTmp);}

在我输入“循环”之后,“S1”自动被分配了一个空行。这是怎么发生的?我肯定我的键盘工作得很好。


守着一只汪
浏览 550回答 3
3回答

慕的地8271018

scanf()读取您所要求的内容,如下所示\n在缓冲区中的行的末尾fgets()会读出来的。要么做一些事情来使用换行符,要么(我喜欢的解决方案)fgets()然后sscanf()从那根绳子上。

元芳怎么了

scanf在输入缓冲区中保留空白,包括新行字符.要使用fget读取下一行,需要手动删除当前行的其余部分:int&nbsp;c;do{ &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;getchar();}while(c&nbsp;!=&nbsp;EOF&nbsp;&&&nbsp;c&nbsp;!=&nbsp;'\n');
打开App,查看更多内容
随时随地看视频慕课网APP