最后那个函数不是查找换行符,并将换行符换成'\0',怎么输出还是Error?
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
看起来你在学习C语言中的字符串处理。首先,让我们分析一下代码的问题。
在图2中,
s_gets()
函数是用来从标准输入读取一行文本并存储到指定的字符数组中的。它通过调用fgets()
来实现这一功能,并且处理了可能存在的换行符。然而,在图3中,你尝试简化这个过程,但存在一些错误。下面是针对图3中的代码进行修改后的版本:
#include <stdio.h> #include <string.h> #include <ctype.h> #define ANSWER "GRANT" #define SIZE 40 char *s_gets(char *st, int n); void ToUpper(char *st); int main(int argc, char *argv[]) { char t[SIZE]; s_gets(t, SIZE); ToUpper(t); while (strcmp(t, ANSWER) != 0) { puts("Error"); s_gets(t, SIZE); ToUpper(t); } return 0; } void ToUpper(char *st) { while (*st != '\0') { *st = toupper(*st); st++; } } char *s_gets(char *st, int n) { char *retval = fgets(st, n, stdin); if (retval) { size_t len = strlen(st); if (len > 0 && st[len - 1] == '\n') { st[len - 1] = '\0'; // 直接在这里去掉换行符 } else { while (getchar() != '\n'); } } return retval; }
这里主要做了两个改动:
- 在
s_gets()
函数中,我改变了移除换行符的部分。现在,如果字符串的最后一个字符是换行符,我们直接将其替换为空字符(\0
)。这样可以避免不必要的getchar()
循环。 - 我去掉了
ToUpper()
函数中的注释,并确保其格式正确。
现在,当用户输入时,程序应该能正确地处理换行符,并在用户输入正确的答案之前显示 "Error"。注意,这里的 "Error" 是在每次循环迭代时显示的,而不是只在输入不匹配的情况下显示。如果你想在用户首次输入错误后才显示 "Error",你需要稍微调整一下主函数的逻辑。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录- 在
悬赏问题
- ¥15 扫描枪扫条形码出现问题
- ¥15 poi合并多个word成一个新word,原word中横版没了.
- ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
- ¥15 求MCSCANX 帮助
- ¥15 机器学习训练相关模型
- ¥15 Todesk 远程写代码 anaconda jupyter python3
- ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?