首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >扫描后fget不工作怎么办?

扫描后fget不工作怎么办?
EN

Stack Overflow用户
提问于 2018-06-13 07:29:47
回答 2查看 0关注 0票数 0
代码语言:txt
复制
#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”自动被分配了一个空行。这是怎么发生的?我肯定我的键盘工作正常。

EN

回答 2

Stack Overflow用户

发布于 2018-06-13 15:56:46

scanf()完全读你您要求的内容\n,将该行末尾的以下内容留在fgets()将读取它的缓冲区中。要么做一些消耗换行符,或者(我的首选解决方案)fgets(),然后从该字符串sscanf()

票数 0
EN

Stack Overflow用户

发布于 2018-06-13 16:35:59

如果fgets()在使用后“跳过” 以下scanf()

之后:

代码语言:javascript
复制
scanf("%d", &loops);

说:

代码语言:javascript
复制
char garbage[100];

fgets(garbage,100,stdin);

这会将输入缓冲区中剩下的任何内容存储到垃圾变量中。

这将有效地清除输入缓冲区,并允许fgets()以后使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档