为了账号安全,请及时绑定邮箱和手机立即绑定

扫描后fget不工作

扫描后fget不工作

C C++
守着一只汪 2019-06-06 13:19:58
扫描后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”自动被分配了一个空行。这是怎么发生的?我肯定我的键盘工作得很好。
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-06-06
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

scanf在输入缓冲区中保留空白,包括新行字符.要使用fget读取下一行,需要手动删除当前行的其余部分:

int c;do{
    c = getchar();}while(c != EOF && c != '\n');


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 549 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信