| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 925 人关注过本帖
标题:大家看看这个程序,怎么跳不出do..while循环
只看楼主 加入收藏
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:13 
大家看看这个程序,怎么跳不出do..while循环
程序代码:
#include <stdio.h>
//#include <ctype.h>
#include <stdlib.h>
#define _STDC_WANT_LIB_EXT1_ 1
#define max_len 2


int main (void)
{
    char xy[max_len] = {'0'};
    int test = 0;
    long int xx = 0;
    printf("\nThis progarm is build a Mult-sheet.");
    
    do
    {
        test = 0;
        
        printf("\nPlase input a number for build the Mul-sheet : ");
        fflush(stdin);
        int ret_scan = scanf_s("%c", xy, sizeof(xy));
        if(ret_scan == EOF)
        {
            printf("Error reading,enter overflow!!\n");
            return 1;
        }

        for(int i = 0; i<max_len; ++i)
        {
            if(xy[i]<'0' || xy[i]>'9')
            {
               test = 1;
               break;
               //printf("xy[%d] = %c\n", i,xy[i]);    
            }

            //printf("xy[%d] = %c\n", i,xy[i]);    
        }

    }
    while(test == 1);
    //while(isalpha(xy) || isspace(xy));

    xx = atol(xy);

    //printf(" xx = %ld\n", xx);

    for(int i = 1; i <= xx ; ++i)
    {
        for(int j = 1; j <= xx; ++j)
        {
            printf("\t%d", i*j);
        }
        printf("\n\n");
    }
    return 0;

}



我用test做测试标志,想通过for()循环检查char xy[]中每一个字符是否是数字。怎么do...while循环出不来了呢?而且我用scanf_s()函数规定最多输入两位字符,但是就是不起作用,为何?
搜索更多相关主题的帖子: include 
2015-03-18 20:33
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
收藏
得分:0 
undefined reference to `scanf_s'
2015-03-18 22:56
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
为毛都不自己调试呢,你肯定没调试过,一直看代码==。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-03-18 23:04
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
以下是引用yangcaifei在2015-3-18 22:56:52的发言:

undefined reference to `scanf_s'

scanf_s()函数是scanf()函数的可选函数,是它的安全版本,是C11标准。我在函数开头声明了 需要使用可选函数。
2015-03-19 11:10
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
以下是引用lovegh在2015-3-18 23:04:46的发言:

为毛都不自己调试呢,你肯定没调试过,一直看代码==。

我用的是Pellse C编译器,调试的时候都是汇编语句。
2015-03-19 11:12
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
由于你定义的xy是字符数组(字符串)

scanf_s("%c", xy, sizeof(xy));

%c 应改成 %s

Only the Code Tells the Truth             K.I.S.S
2015-03-19 12:22
_Dennis_h
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2015-3-6
收藏
得分:0 
以下是引用longwu9t在2015-3-19 12:22:02的发言:

由于你定义的xy是字符数组(字符串)

scanf_s("%c", xy, sizeof(xy));

%c 应改成 %s

这样只是解决了scanf_s函数规定输入字符多少的问题,%s可以,最多输入sizeof(xy)-1个字符,但是我在书中看到%c也可以啊,但是为何我这里不行?我主要想解决为何跳不出do...while循环。你的Pellse C 怎么Debug的?上次你给的图没看懂。。。
2015-03-19 12:37
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
if(xy[i]<'0' || xy[i]>'9')   给为
if(xy[i]<'0' && xy[i]>'9')

总有那身价贱的人给作业贴回复完整的代码
2015-03-19 13:24
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define max_len 2

int main(void) {
    char xy[max_len] = {0};
    int test;
    long int xx = 0;
    printf("\nThis progarm is build a Mult-sheet.");

    do {
        test = 0;
        printf("\nPlase input a number for build the Mul-sheet : ");
        fflush(stdin);

        if((scanf_s("%c", xy, sizeof(xy))) == EOF) {
            printf("Error reading,enter overflow!!\n");
            exit(EXIT_FAILURE);
        }

        if(xy[0] < '0' || xy[0] > '9') test = 1;
    } while(test == 1);

    xx = atol(xy);

    for(int i = 1; i <= xx; ++i) {
        for(int j = 1; j <= xx; ++j) {
            printf("\t%d", i * j);
        }

        printf("\n\n");
    }

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-03-19 14:03
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:20 
回复 7楼 _Dennis_h
图片附件: 游客没有浏览图片的权限,请 登录注册

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

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

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

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

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

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

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

我这是用了插件 方便DEBUG
不用插件 pellesc 也照样DEBUG
关键是工程选项里把DEBUG开关打开
图片附件: 游客没有浏览图片的权限,请 登录注册

因为pellesc默认建立的项目是关闭DEBUG的

Only the Code Tells the Truth             K.I.S.S
2015-03-19 14:13
快速回复:大家看看这个程序,怎么跳不出do..while循环
数据加载中...
 
   



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

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