gpt4 book ai didi

c - 在 C 中使用 scanf 在 !=EOF 处退出 do while 循环会进行 3 次额外迭代

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

这段代码有一些问题

我正在尝试通过标准输入读取 .txt,具体来说,我遵循的编译步骤是:

g++ eda.c -o eda.exe
./eda.exe < eda.txt

.txt文件的内容是:

3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
print v3
incr v3 v1

前 4 行现在没有兴趣,这些行已经用 getline 指令读取了。所以问题从第五行开始,“incr ...”

在该行中,我希望得到如下输出:print! 但我得到:

打印!
打印!
打印!

(与 incr 相同)

读取 incrprint 的代码的特定部分以:char mystring [20];

注意:使用 fgets() 解决了!

这是最终代码:

do {
//sscanf (mystring,"%s",str);
//int res = strncmp(str, "incr", 10);
if(mystring[0] == 'p') casenumber = 1;
else if(mystring[0] == 'i') casenumber = 2;
else if(mystring[0] == 'd' && mystring[1] == 'o') casenumber = 3;
else if(mystring[0] == 'd' && mystring[1] == 'i') casenumber = 4;
else if(mystring[0] == 'd' && mystring[1] == 'e') casenumber = 5;

switch(casenumber)
{
case 1 :
printf("print!\n" );
break;
case 2 :
printf("increase!\n");
break;
case 3 :
printf("dot!\n");
break;
case 4 :
printf("distance!\n");
break;
case 5 :
printf("decr!\n");
break;
default :
printf("casenumber value is: %d\n", casenumber);
break;
}
casenumber = 0;
} while (fgets (mystring , 21 , stdin) != NULL);

最佳答案

你试过打印scanf的结果吗?

scanf 不读取一行,它读取一个简单的字符串,因此您的代码将循环比您预期的次数更多。

其他问题...

每次在循环内运行时清除变量。

casenumber = 0;
memset(mystring, 0, sizeof(mystring));

并测试scanf的结果

if ( result == 1 )
printf("sscanf error");

关于c - 在 C 中使用 scanf 在 !=EOF 处退出 do while 循环会进行 3 次额外迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433871/

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