You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:22:47