如何用strcmp()输入'end'后立即退出字符定位程序
解决输入"end"后直接退出程序的问题
嘿,我懂你的困扰——现在输入"end"之后,程序还会硬要你输入一个字符才肯退出,这完全不是你想要的效果。问题出在你的input函数里:它不管你输入的字符串是什么,都会先读完字符串,然后立刻要求输入字符,之后才会回到main函数里判断是不是"end"。所以我们得调整输入的顺序,让程序在读完字符串后先检查是不是退出指令,再决定要不要读字符。
最简单的修改方案(拆分输入逻辑)
直接把字符串的读取和判断放在字符读取前面,这样一旦检测到"end",就直接跳出循环:
#include <stdio.h> #include <string.h> int strcheck(char*, char); int main() { int count; char str[100], ch; while (1) { printf("# enter string : "); scanf("%s", str); // 先判断是否是退出指令,是的话直接终止循环 if (strcmp(str, "end") == 0) { break; } // 不是退出指令,再读取字符并执行查找逻辑 printf("# enter character : "); scanf(" %c", &ch); count = strcheck(str, ch); if (count == -1) { printf("\"%s\" string doesn't have '%c'. \n\n", str, ch); } else { printf("\"%s\" string has '%c' in position number %d .\n\n", str, ch, count + 1); } } return 0; } int strcheck(char* strp, char chp) { int i; int size = strlen(strp); for (i = 0; i < size; i++) { if (strp[i] == chp) { return i; } } return -1; }
另一种封装式修改(保留input函数)
如果你希望保持input函数的封装性,可以修改它的返回值,让它告诉主函数是否需要退出:
#include <stdio.h> #include <string.h> int input(char*, char*); int strcheck(char*, char); int main() { int count; char str[100], ch; while (1) { // 调用input函数,获取是否需要退出的标志 int should_exit = input(str, &ch); if (should_exit) { break; } count = strcheck(str, ch); if (count == -1) { printf("\"%s\" string doesn't have '%c'. \n\n", str, ch); } else { printf("\"%s\" string has '%c' in position number %d .\n\n", str, ch, count + 1); } } return 0; } // 修改input函数,返回1表示需要退出,0表示继续执行 int input(char* strp, char* chp) { printf("# enter string : "); scanf("%s", strp); // 先检查是否是退出指令 if (strcmp(strp, "end") == 0) { return 1; } // 不是退出指令,再读取目标字符 printf("# enter character : "); scanf(" %c", chp); return 0; } int strcheck(char* strp, char chp) { int i; int size = strlen(strp); for (i = 0; i < size; i++) { if (strp[i] == chp) { return i; } } return -1; }
为什么这样改?
原来的input函数会强制执行两次输入操作:先读字符串,再读字符,完全不考虑字符串的内容。修改后,我们把strcmp的判断提前到字符输入之前——只要输入的字符串是"end",程序就直接终止,不会再要求输入字符,完美符合你的需求。
现在测试一下,输入"end"之后,程序会立刻退出,不会再出现要求输入字符的提示啦!
内容的提问来源于stack exchange,提问作者Learner_15
相关产品推荐
相关产品推荐

