| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2446 人关注过本帖
标题:求教大佬,为啥vs编译器执行不了do-while循环??
只看楼主 加入收藏
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:8 
求教大佬,为啥vs编译器执行不了do-while循环??
先装的vs2017,结果发现do-while无法循环,以为是编译器的毛病,又装了vs2015,结果还是不行,请问这是咋回事呀?
代码如下
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char yn = 0;
    int a = 0, b = 0;
    do
    {
        printf("Enter a value:");
        scanf_s(" %d", &a);
        b = a*a;
        printf(" %d \n\n", b);

        printf("Again?(y/n)");
        scanf_s(" %c", &yn);

    } while (yn == 'y' || yn == 'Y');

    printf("Byebye..\n\n");

    system("pause");

    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册




另外,同样的代码用vc6编译就完全没问题,为什么vs系列用不了do-while呀?
搜索更多相关主题的帖子: vs 编译器 执行 循环 printf 
2019-05-18 14:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:10 
第一,出问题后别自信到认为是编译器的错,而不是自己的错。也就是别急着将vc2017换成vc2015
第二,少用scanf_s这类脑残函数
第三,scanf_s(" %c", &yn)换成scanf_s(" %c", &yn,1);试试,我不肯定,因为我没用过。
2019-05-18 16:01
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
收藏
得分:0 
回复 2楼 rjsp
呃,给大佬您解释一下
第一,不是一出问题就认为是编译器的错,而是同样的代码在vc6运行没有问题,放到vs2017才出问题,俺才觉得很诡异。
第二,在vs下使用scanf会报错,说真的我也觉得scanf_s很别扭,可木办法
第三,按您说的,加了‘,1’呃,果然循环起来了,厉害呀,就是能不能请您简单说下,这操作是啥原理呀?为什么寻址之后还要加个1?劳烦劳烦
2019-05-18 16:19
李掌柜
Rank: 6Rank: 6
等 级:侠之大者
帖 子:94
专家分:406
注 册:2015-6-18
收藏
得分:0 
我的VS2017没毛病啊

照片是可以做成小游戏的,快来私聊我吧!
2019-05-18 19:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
同样的代码在vc6运行没有问题

vc6中根本没scanf_s这个函数,怎么可能“运行没有问题”?
2019-05-18 22:46
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
收藏
得分:0 
回复 5楼 rjsp
好吧,大佬,您的意思我总算明白了,关键就是尽量避免使用scanf_s是吧,那在代码开头加上#define _CRT_SECURE_NO_WARNINGS就能正常实用scanf了,这样就不会再出现乱七八糟的问题了对吧,咳咳,之前是图个省事儿,才用的scanf_s,毕竟比加这一大串好打多了,天晓得这么多坑!

因为前两天和人聊天,有个家伙听说我在用vc6学编程,立刻一脸不屑状说这都什么年代了,还用那种老掉牙的东西……俺表示很无语,不过说心里话,就个人感觉而言,真觉得vs2017用起来没有vc6那样简洁便利,或许它功能很强大,但对于菜鸟级别的俺来说,也根本体会不到强仔哪里……
2019-05-18 23:23
李掌柜
Rank: 6Rank: 6
等 级:侠之大者
帖 子:94
专家分:406
注 册:2015-6-18
收藏
得分:0 
scanf_s() 这个函数不是标准函数 是WIN公司的一个scanf()加强(安全)版本

Tip
现在应该很少人用 do while 这种结构, 老前辈们好像很喜欢
在那本书中好像建议少用 do while,忘了是那本书了
每个公司每个个人都有自己的代码规范,自己能懂就好,别人能看懂更好

照片是可以做成小游戏的,快来私聊我吧!
2019-05-19 01:48
年轻
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-5-19
收藏
得分:0 
这个怎么用啊,我是萌新
2019-05-19 11:26
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:0 
回复 6楼 caodafu
vc6是比较老了。
Visual Studio 确实很强大,所以我用Dev-C++。

saber,别哭.
2019-05-19 14:35
快速回复:求教大佬,为啥vs编译器执行不了do-while循环??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046792 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved