九一八事变

1931年9月18日,“九一八”事变爆发,标志着抗日战争的开始。此次事变导致长达14年的抗战,期间3500多万同胞伤亡、930余座城市被占领。铭记历史,不忘国耻,我们应当自强不息,为国家的繁荣昌盛而努力。

1931年的今天,“九一八”事变爆发,抗日战争拉开序幕。14年抗战期间,3500多万同胞伤亡、930余座城市被侵占。牢记历史,勿忘国耻!吾辈自强,振兴中华!

### 输入读取失败的原因 - **输入不符合格式要求**:`scanf("%80s", s1)` 中的 `%s` 格式说明符会读取连续的非空白字符,直到遇到空白字符(如空格、制表符、换行符)为止。如果输入为空或者没有符合要求的非空白字符,`scanf` 就无法成功读取数据,返回值将不为 1。 - **到达文件末尾**:当从文件或者标准输入流读取数据时,如果已经到达文件末尾(EOF),`scanf` 会返回 EOF,而不是成功匹配和赋值的个数 1。 - **发生读错误**:在读取输入的过程中,如果发生了读错误,例如输入设备出现故障,`scanf` 也会返回 EOF,导致输入读取失败。 ### 解决方案 - **检查输入格式**:确保输入包含符合要求的非空白字符。如果输入可能包含空格,可以使用 `fgets` 函数来读取整行输入,然后再进行处理。 - **处理文件末尾和读错误**:在代码中已经对 `scanf` 的返回值进行了检查,如果返回值不为 1,则输出错误信息并终止程序。可以根据具体情况进行更详细的错误处理,例如提示用户重新输入。 以下是使用 `fgets` 函数读取输入的改进代码: ```c #include <stdio.h> #include <string.h> int Strstr(char s1[], char s2[]) { int length1 = strlen(s1); int length2 = strlen(s2); if (length2 == 0) { return 0; } int j = 0; int i = 0; while (i < length1) { if (j == (length2 - 1) && s2[j] == s1[i]) { return i - length2 + 1; } if (s2[j] == s1[i]) { i++; j++; } else { i++; j = 0; } } return -1; } void removeSubstring(char s1[], char s2[]) { int pos; while ((pos = Strstr(s1, s2)) != -1) { int len1 = strlen(s1); int len2 = strlen(s2); for (int i = pos; i <= len1 - len2; i++) { s1[i] = s1[i + len2]; } s1[len1 - len2] = '\0'; } } int main() { char s1[81], s2[81]; if (fgets(s1, sizeof(s1), stdin) == NULL || fgets(s2, sizeof(s2), stdin) == NULL) { fprintf(stderr, "输入读取失败\n"); return 1; } // 去除 fgets 可能读取的换行符 s1[strcspn(s1, "\n")] = 0; s2[strcspn(s2, "\n")] = 0; removeSubstring(s1, s2); printf("%s\n", s1); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvzhengyang

感谢,励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值