标题:求教大佬,为啥vs编译器执行不了do-while循环??
取消只看楼主
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
结帖率:66.67%
已结贴  问题点数:10 回复次数:2 
求教大佬,为啥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
caodafu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-4-28
得分:0 
回复 2楼 rjsp
呃,给大佬您解释一下
第一,不是一出问题就认为是编译器的错,而是同样的代码在vc6运行没有问题,放到vs2017才出问题,俺才觉得很诡异。
第二,在vs下使用scanf会报错,说真的我也觉得scanf_s很别扭,可木办法
第三,按您说的,加了‘,1’呃,果然循环起来了,厉害呀,就是能不能请您简单说下,这操作是啥原理呀?为什么寻址之后还要加个1?劳烦劳烦
2019-05-18 16:19
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494796-1-1.html




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

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