首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C中的scanf退出do while循环at !=EOF将进行3次额外的迭代

使用C中的scanf退出do while循环at !=EOF将进行3次额外的迭代
EN

Stack Overflow用户
提问于 2013-10-17 17:56:53
回答 1查看 242关注 0票数 1

我对这段代码有一些问题

我正在尝试通过stdin读取.txt,特别是我编译的步骤是:

代码语言:javascript
复制
g++ eda.c -o eda.exe
./eda.exe < eda.txt

.txt文件的内容是:

代码语言:javascript
复制
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
print v3
incr v3 v1

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

使用该行,我希望输出为:print!,但我得到:

print! print! print!

(incr也是如此)

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

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

这是最终代码:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-17 18:06:51

你试过打印扫描结果吗?

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

其他问题..。

清除循环中每次运行的变量。

代码语言:javascript
复制
casenumber = 0;
memset(mystring, 0, sizeof(mystring));

并测试了扫描结果。

代码语言:javascript
复制
if ( result == 1 )
    printf("sscanf error");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19433871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档