如何使用 strcmp() 立即退出程序而不打印下一行

How to exit the program immediately using strcmp() without printing the next line

代码本身是关于输入一个字符串和一个字符,然后程序打印出该字符在特定字符串中的位置。

我想添加的是当输入单词“end”时立即退出程序,使用strcmp().

目前的问题是虽然我输入了“end”这个词,但我需要输入一个字符才能程序结束。

我想要的是程序在输入“end”后立即结束。

#include <stdio.h>
#include <string.h>

void input(char*, char*);
int strcheck(char*, char);

int main()
{
    int count;
    char str[100], ch;

    while (1) {
        input(str, &ch);
        if (strcmp(str, "end") == 0) {      //I'm guessing this part is the problem
            break;
        }
        else {
            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;
}

void input(char* strp, char* chp)
{
    printf("# enter string : ");
    scanf("%s", strp);
    printf("# enter character : ");
    scanf(" %c", chp);
    return;
}

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;
}

此代码的结果如下...

# enter string : end
# enter character : a

但我想要的是...

# enter string : end    //--> exit immediately

问题是在检查字符串之前总是询问字符,这是因为字符串和字符输入例程在输入函数中,在检查字符串之前完全执行,有多种方法可以解决这个。

要求必须在字符之前检查字符串,一种方法是将此检查移动到输入函数中:

void input(char *strp, char *chp)
{
    printf("# enter string : ");
    scanf(" %99s", strp); // the input size should be limited to the container capacity
                          // %99s -> 99 characters + null terminator at most
    if (strcmp(strp, "end") == 0)
    {
        exit(0);  //exit() requires #include <stdlib.h>
    }

    printf("# enter character : ");
    scanf(" %c", chp);
    return;
}
int main()
{
    int count;
    char str[100], ch;

    while (1)
    {
        input(str, &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;
}