如何停止接收 C 中的输入

How can I stop receiving input with a input in C

我需要不断地从用户那里获取命令,为此我写了这个:

scanf("%s %d %s %d", str1, &num1, str2, &num2);

用户应输入如下内容:

move 8 over 3

当用户键入 exit 并输入时,就这一行,我必须停止阅读并打印结果。问题是,我不知道该怎么做。 代码上下文:

do{
    scanf("%s %d %s %d", str1, &num1, str2, &num2); 

    do_stuff(vp, str1, str2, num1, num2, size);
}while (strncmp(str1, exit, 4)); // I used this but I must write (exit 1 exit 1) at least.

strncmp()中,exit是一个字符串,带有“exit”,因此比较这四个前字符我可以停止循环,但我必须输入所有四个预期输入。

你可以试试这个:

while ((scanf("%s", &str1) == 1) && strcmp(str1, "exit")) {
     scanf("%d %s %d", &num1, str2, &num2);

     do_stuff(vp, str1, str2, num1, num2, size);
}

我制作了这个示例代码并且它对我有用,基本上这让我们为所需的四个变量输入值并在 strcmp(str1, "exit") == 0 时停止循环,注意在两个 scanf 中输入了 4 个值(),不知道对buffer有什么影响

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

void do_stuff(char *str1, char *str2, int num1, int num2) {
    printf("     entered: %s %d %s %d\n", str1, num1, str2, num2);
}

int main() {

    char str1[100], str2[100];
    int num1 = 0, num2 = 0;

    while ((scanf("%99s", &str1) == 1) && strcmp(str1, "exit")) {
        scanf("%d %99s %d", &num1, str2, &num2);

        do_stuff(str1, str2, num1, num2);
    }
    printf("     loop finish!");

    return 0;
}

命令行:

move 8 over 3
     entered: move 8 over 3
move 4 over 2
     entered: move 4 over 2
exit
     loop finish!

正如 kaylum 所指出的,在这种情况下最好使用 fgets。这将立即为您提供整行,但更重要的是,它允许您设置最大尺寸。如果 scanf 读取的输入超出缓冲区的容量,它将覆盖缓冲区,这很危险。

char line[MAX_LINE]; // MAX_LINE should be a maximum input you define
while(fgets(line, sizeof line, stdin)) {
    char str1[MAX_LINE];
    char str2[MAX_LINE];

    if(strcmp(line, exit) == 0)
        break;

    // sscanf works like scanf, except it reads from a string
    // it is safer because you now have a string of a maximum size
    int r = sscanf(line, "%s %d %s %d", str1, &num1, str2, &num2);
    if(r == 4)
        do_stuff(vp, str1, str2, num1, num2);
    else
        puts("Wrong input format. Try again");
}