gpt4 book ai didi

C - scanf 等待,直到可以评估格式中的所有部分

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:35 25 4
gpt4 key购买 nike

我的时间不多,很多关于 stdin 的东西在这个阶段提出的问题比它回答的要多得多。我希望测试通过 scanf 的多个实例传递的多种类型的命令。

如果我这样做:

char inputChar;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;

if(scanf("%c %d %lf",&inputChar,&inputInt,&inputDec) == 3) {
...
}
else if(scanf("%c %d %s",&inputChar,&inputInt,&inputChars) == 3) {
...
}
else if(scanf("%c %d",&inputChar,&inputInt) == 2) {
...
}
else if(scanf("%c",&inputChar) == 1) {
...
}
else {
...
}

然后键入一个字符并按 Enter,控制台会等到我输入另一个值,然后再评估是否匹配。

更新

这似乎工作正常,除了它希望您在使用时输入完美。如果用户键入 aa 然后在按 Enter 之前将其更改为 a 10,则它匹配第 4 个评估。这是错误的,原因有二:

  1. 因为如果正确捕获输入,它应该匹配第 3 个;和
  2. 因为如果aa 应该被过滤到第 5 次评估中。

修改后的代码:

char input[50] = { NULL };

char inputChar = NULL;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;

printf("Input String:\n>");

fgets(input,sizeof(input),stdin);

if(sscanf(input,"%c%d %lf",&inputChar,&inputInt,&inputDec) == 3) { }
else if(sscanf(input,"%c%d%s",&inputChar,&inputInt,&inputChars) == 3) { }
else if(sscanf(input,"%c%d",&inputChar,&inputInt) == 2) { }
else if(sscanf(input,"%c",&inputChar) == 1) { }
else { }

做这样的事情表明退格键没有被过滤掉:

for(int i=0;i<50;i++) {
if(input[i] == (char) 10) { break; }
printf("\n%c %d",(char) input[i],(int) input[i]);
}

所以看起来 fgets 不在画面中。

最佳答案

语句按顺序执行。所以这是等待更多输入的第一个 scanf 调用。如果输入与第一次调用不匹配,则下一次 scanf 调用将重新开始,等待输入。等等。

相反,您应该使用 fgets 读取整行,然后在该行上使用 sscanf

关于C - scanf 等待,直到可以评估格式中的所有部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15082806/

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