吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1223|回复: 10
收起左侧

[已解决] 这串C代码哪里出错了

[复制链接]
mxwawaawxm 发表于 2020-2-29 22:09
本帖最后由 mxwawaawxm 于 2020-3-1 19:09 编辑

[C] 纯文本查看 复制代码
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>


#define MAXCNT 3

/*--- C语言的关键字和库函数 ---*/
const char *cstr[] = {
    "auto", "break", "case", "char", 
};

void input_ch(const char *str, int *mistake);
void clang_train(const char *mes, const char **cstr, int len);

int main(int argc, const char *argv[])
{
    srand(time(NULL));
    
    clang_train("C语言的单词", cstr, sizeof(cstr)/sizeof(cstr[0]));
    
    return 0;
}

void clang_train(const char *mes, const char **cstr, int len)
{
    int i;
    int rand_idx;
    int mistake=0;
    
    printf("\n练习%d个%s。\n", MAXCNT, mes);
    printf("按下空格键开始。\n");
    while (getch()!=' ') {
        ;
    }
    
    for (i=0;i<MAXCNT;i++) {
        rand_idx=rand()%len;
        input_ch(*(cstr+rand_idx), &mistake);
    }
    
    printf("\r题目:%d字符/错误:%d次\n", MAXCNT*10, mistake);
}

/*依次输入单个字符*/
void input_ch(const char *str, int *mistake)
{
    int j=0;
    int ch;
    
    while (*str!='\0') {
        putch('\r');
        ch=getch();
        if (ch==*str) {
            j++;
            str++;
            printf("\r%s%*s", str, j, "");
        } else {
            (*mistake)++;
            printf("\a");
        }
    }
}


症状如下,到这里始终运行不下去。本来是设计成按下空格,就继续下面的代码。可是无论按什么键,都走不下去
[C] 纯文本查看 复制代码
    printf("按下空格键开始。\n");
    while (getch()!=' ') {
        ;
    }

2020-02-29_215842.png

初步测试,应该是这个函数出错了
[C] 纯文本查看 复制代码
void input_ch(const char *str, int *mistake)

当我注释掉,就可以了
2020-02-29_220318.png
可是编译也通过,运行也没报错。单独测试这个函数,也可以。到底哪里出错了
2020-02-29_220855.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

庸人误我 发表于 2020-2-29 22:58
image.png
不是程序的问题,程序其实一直在执行,是你这个难度太高了,我加了这行代码调试了下。
每次要猜出是哪一个字符串,而且只能靠一个\a的提示音。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

头像被屏蔽
那年听风 发表于 2020-2-29 22:10
非酋的春天 发表于 2020-2-29 22:16
 楼主| mxwawaawxm 发表于 2020-2-29 22:21

大致是
[C] 纯文本查看 复制代码
const char *cstr[] = {"auto", "break", "case", "char",};

1、大致是先有一个字符指针数组,里面元素分别指向一些字符串
2、用户输入空格表示开始,进入第3步骤。否则不断循环
[C] 纯文本查看 复制代码
    while (getch()!=' ') {
        ;
    }

3、随机找出一项字符串,让用户输入。比如auto,用户逐个输入字符。输错提示响铃声,输对则打印后面的字符
jyyjyy 发表于 2020-2-29 22:50
本帖最后由 jyyjyy 于 2020-2-29 22:58 编辑

可以运行
@mxwawaawxm 你要的功能是什么
[C++] 纯文本查看 复制代码
/*依次输入单个字符*/
void input_ch(const char *str, int *mistake)
{
    int j=0;
    int ch;
    printf("\r%s",str);
    while (*str!='\0') {
        putch('\r');
        ch=getche();
        if (ch==*str) {
            j++;
            str++;
            printf("\r%s", str);
        } else {
            (*mistake)++;
            printf("\a\r%s", str);
        }
    }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| mxwawaawxm 发表于 2020-2-29 23:06
庸人误我 发表于 2020-2-29 22:58
不是程序的问题,程序其实一直在执行,是你这个难度太高了,我加了这行代码调试了下。
每次要猜出是哪一 ...

谢谢。明白了。我又犯了这么低端的错误
少了一行代码
[C] 纯文本查看 复制代码
printf("\r%s\r", *(cstr+rand_idx));

我还以为卡在这里不动了
[C] 纯文本查看 复制代码
    while (getch()!=' ') {
        ;
    }

你说的调试,是用Visual Studio调试吗
 楼主| mxwawaawxm 发表于 2020-2-29 23:07
jyyjyy 发表于 2020-2-29 22:50
可以运行
@mxwawaawxm 你要的功能是什么
[mw_shl_code=cpp,true]/*依次输入单个字符*/

谢谢
6楼给出了缺漏的地方
absman1972 发表于 2020-3-1 00:55
善用編譯器的Debug功能
實在不熟悉,可以自己手動加一些printf
這樣可以幫助判斷程式碼跑到那裡
避免先入為主的人工判斷

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| mxwawaawxm 发表于 2020-3-1 18:57
absman1972 发表于 2020-3-1 00:55
善用編譯器的Debug功能
實在不熟悉,可以自己手動加一些printf
這樣可以幫助判斷程式碼跑到那裡

用的是notepad++,不知道怎么调试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表