gpt4 book ai didi

c - Scanf 输入结转到下一个 scanf

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:34 27 4
gpt4 key购买 nike

我这里有一段代码,在输入带空格的字符串时会出现一些不需要的行为。例如 print illegal_argument。当输入包含多个单词时,我希望它只注册第一个单词。

目前发生的是:

christian@oblig2 $ print 0
Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000

它为命令循环中的比较注册第一个 print。但是 scanf 不会提示用户进行下一个输入,而是忽略它并获取用户从上一个 scanf 输入的第二个单词/数字。

我想要发生的是:

christian@oblig2 $ print 0
Enter router ID for information > 0
ID: 0, flag: f7, model_length: 13, model: D-link y6000.

否则一切都按预期工作,但我想知道是否有更简单的方法来做到这一点。我试过使用 Strtok,但运气不佳。

char input[256];
printf("%s@oblig2 $ ", getenv("USER"));
scanf("%s", input);

if(strcmp(input, "print") == 0) {
print();
}

上面的代码是我从用户那里获取输入的方式。

有人有什么想法吗?

最佳答案

scanf() 获取第一个输入值后,它会将其余值留在输入流中。试试这个来丢弃剩余的字符:

int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
continue; // discard remaining characters

如果您将这些行放在下一次从 stdin 读取之前,额外的字符将不会破坏您的输入。

关于c - Scanf 输入结转到下一个 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com