吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1501|回复: 6
收起左侧

[已解决] 为什么这串c代码里的字符串无法显示

[复制链接]
mxwawaawxm 发表于 2019-11-3 17:53
本帖最后由 mxwawaawxm 于 2019-11-5 21:51 编辑

源自这道题
2019-11-03_172851.png
我写的代码
我的想法是由用户输入字符串、显示的时间、消失的时间、重复次数
但是实际运行过程,
[C] 纯文本查看 复制代码
printf("\r第%d次--%s", i+1, string);
字符串没显示,哪里错了。请问
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <time.h>
#include <string.h>

#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);

int main(int argc, char *argv[])
{
        char string[LEN];
        int display_ms;
        int disappear_ms;
        int cnt;
        
        printf("请依次输入字符串、显示时间,消失时间,次数--");
        scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
        
        bput(string, display_ms, disappear_ms, cnt);

        
        return 0;
}

int sleep(unsigned long millisecond)
{
        clock_t start=clock(), end;
        
        do {
                if ((end=clock())==(clock_t)-1) {
                        return 0;
                }
        } while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
        
        return 1;
}

void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
        int i;
        int length=strlen(string);
        
        for (i=0;i<cnt;i++) {
                printf("\r第%d次--%s", i+1, string);
                fflush(stdout);
                sleep(display_ms);
                printf("\r第%d次--%*s", i+1, length, " ");
                fflush(stdout);
                sleep(disappear_ms);
        }
        printf("\n%s\n", string);

}

test (20).gif
为什么字符串无法显示

免费评分

参与人数 1吾爱币 +1 收起 理由
庸人误我 + 1 热心回复!

查看全部评分

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

庸人误我 发表于 2019-11-3 18:44
[Asm] 纯文本查看 复制代码
#include <stdio.h>
#include <time.h>
#include <string.h>

#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);

int main(int argc, char *argv[])
{
    char string[LEN];
     int display_ms;
     int disappear_ms;
    int cnt;
    printf("请依次输入字符串、显示时间,消失时间,次数--\n");
    scanf("%s %d %d %d", string, &display_ms, &disappear_ms, &cnt);
    bput(string, display_ms, disappear_ms, cnt);


    return 0;
}

int sleep(unsigned long millisecond)
{
    clock_t start=clock(), end;

    do {
        if ((end=clock())==(clock_t)-1) {
            return 0;
        }
    } while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);

    return 1;
}

void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
    int i;
     int length=strlen(string);

    for (i=0;i<=cnt;i++) {
        printf("\r第%d次--%s", i+1, string);
        fflush(stdout);
        sleep(display_ms);
        printf("\r第%d次--%*s", i+1, length, " ");
        fflush(stdout);
        sleep(disappear_ms);
    }

}



你的scanf接收了两个相同的值disappear_ms吧

免费评分

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

查看全部评分

 楼主| mxwawaawxm 发表于 2019-11-4 20:57
本帖最后由 mxwawaawxm 于 2019-11-4 20:59 编辑

能否再帮我看看@庸人误我
我想实现以下功能
用户输入字符串、显示的时间、消失的时间、重复次数
然后显示时间除以字符串长度,得到每个字符的显示时间,依次显示每个字符
而后消失时间除以字符串长度,得到每个字符的消失时间,依次消失每个字符

我的代码如下
结果出现,在显示字符串时,不是依次显示每个字符,而是整个出来。而且不能显示最后一个字符,哪里出错了
test (21).gif
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <time.h>
#include <string.h>

#define LEN 128
int sleep(unsigned long millisecond);
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(char *string, int disappear_ms, int length);

int main(int argc, char *argv[])
{
        char string[LEN];
        int display_ms;
        int disappear_ms;
        int cnt;
        
        printf("请依次输入字符串、显示时间,消失时间,次数--");
        scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
        
        /*字符串闪烁显示*/
        /*隔特定时间依次显示每个字符,而后隔特定时间消去每个字符*/
        flicker_str(string, display_ms, disappear_ms, cnt);
        
        return 0;
}

/*暂停多少秒*/
int sleep(unsigned long millisecond)
{
        clock_t start=clock(), end;
        
        do {
                if ((end=clock())==(clock_t)-1) {
                        return 0;
                }
        } while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
        
        return 1;
}

void flicker_str(char *string, int display_ms, int disappear_ms, int cnt)
{
        int length=strlen(string);
        int i=0;
        
        for (;i<cnt;i++) {
                /*隔特定时间依次显示每个字符*/
                display_one_by_one(string, display_ms, length);
                /*隔特定时间消去每个字符*/
                disappear_one_by_one(string, disappear_ms, length);
        }
        
        printf("%s\n", string);
}

/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
        /*将显示时间除以字符串长度,获得每个字符的显示速度*/
        int display_ms_one=display_ms/length;
        
        while (*string!='\0') {
                printf("%c", *string++);
                fflush(stdout);
                sleep(display_ms_one);
        }
}

/*隔特定时间消去每个字符*/
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
        /*将消失时间除以字符串长度,获得每个字符的消失速度*/
        int disappear_ms_one=disappear_ms/length;
        int i=0;
        
        for (;i<length;i++) {
                printf("\b \b");
                fflush(stdout);
                sleep(disappear_ms_one);
        }
}
庸人误我 发表于 2019-11-5 13:04
本帖最后由 庸人误我 于 2019-11-5 13:20 编辑

[Asm] 纯文本查看 复制代码
#include <stdio.h>
#include <time.h>
#include <string.h>

#define LEN 128
int sleep(unsigned long millisecond);
void bput(const char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(char *string, int disappear_ms, int length);

int main(int argc, char *argv[])
{
    char string[LEN];
    int display_ms;
    int disappear_ms;
    int cnt;
    printf("请依次输入字符串、显示时间,消失时间,次数--\n");
    scanf("%s %d %d %d", string, &display_ms, &disappear_ms, &cnt);
    bput(string, display_ms, disappear_ms, cnt);
    
    
    return 0;
}

int sleep(unsigned long millisecond)
{
    clock_t start=clock(), end;
    
    do {
        if ((end=clock())==(clock_t)-1) {
            return 0;
        }
    } while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
    
    return 1;
}

void bput(const char *string, int display_ms, int disappear_ms, int cnt)
{
    int i;
    int length=strlen(string);
    
    for (i=0; i<cnt; i++) {
        display_one_by_one(string,display_ms,length);
        disappear_one_by_one(string,disappear_ms,length);
    }
    
}
/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
    /*将显示时间除以字符串长度,获得每个字符的显示速度*/
    int display_ms_one=display_ms/length;
    
    while (*string!='\0') {
        printf("%c", *string++);
        fflush(stdout);
        sleep(display_ms_one);
    }
}

/*隔特定时间消去每个字符*/
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
    /*将消失时间除以字符串长度,获得每个字符的消失速度*/
    int disappear_ms_one=disappear_ms/length;
    int i=0;
    
    for (;i<=length;i++) {
        printf("\b \b");
        fflush(stdout);
        sleep(disappear_ms_one);
    }
}



你看下是这样子的吗?没得录动态图的软件,你函数都写好了,调用就可以了呀!有个小错就是显示字符时的for循环i<=length.否则会少打印一个字符
 楼主| mxwawaawxm 发表于 2019-11-5 21:04
本帖最后由 mxwawaawxm 于 2019-11-5 21:06 编辑

谢谢。直接按你的代码,除了一些错误提示,大致可以了@庸人误我

错误提示
2019-11-05_205637.png
不过,你提到的,是说这里吗
有个小错就是显示字符时的for循环i<=length.否则会少打印一个字符

[C] 纯文本查看 复制代码
void disappear_one_by_one(char *string, int disappear_ms, int length)
{
    /*将消失时间除以字符串长度,获得每个字符的消失速度*/
    int disappear_ms_one=disappear_ms/length;
    int i=0;
     
    for (;i<length;i++) {
        printf("\b \b");
        fflush(stdout);
        sleep(disappear_ms_one);
    }


我把等于去掉,没影响结果。这应该不用加等号
test (21).gif
不过很奇怪的是,我发现你给的代码,大部分也是调用我写的函数,但是我源代码显示出来的结果就跟你不一样
显示字符串时,是一次性显示,而且少了最后一个字符,但消去字符时,倒是正常,一个个消去
test (22).gif
我始终不明白我的代码错在哪里你能运行我的代码看看吗
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <time.h>
#include <string.h>
 
#define LEN 128
int sleep(unsigned long millisecond);
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt);
void display_one_by_one(char *string, int display_ms, int length);
void disappear_one_by_one(int disappear_ms, int length);
 
int main(int argc, char *argv[])
{
        char string[LEN];
        int display_ms;
        int disappear_ms;
        int cnt;
         
        printf("请依次输入字符串、显示时间,消失时间,次数--");
        scanf("%s %d %d %d", string, &disappear_ms, &disappear_ms, &cnt);
         
        /*字符串闪烁显示*/
        /*隔特定时间依次显示每个字符,而后隔特定时间消去每个字符*/
        flicker_str(string, display_ms, disappear_ms, cnt);
         
        return 0;
}
 
/*暂停多少秒*/
int sleep(unsigned long millisecond)
{
        clock_t start=clock(), end;
         
        do {
                if ((end=clock())==(clock_t)-1) {
                        return 0;
                }
        } while ((end-start)*1000.0/CLOCKS_PER_SEC < millisecond);
         
        return 1;
}
 
void flicker_str(char *string, int display_ms, int disappear_ms, int cnt)
{
        int length=strlen(string);
        int i=0;
         
        for (i=0;i<cnt;i++) {
                /*隔特定时间依次显示每个字符*/
                display_one_by_one(string, display_ms, length);
                /*隔特定时间消去每个字符*/
                disappear_one_by_one(disappear_ms, length);
        }
         
        printf("%s\n", string);
}
 
/*隔特定时间依次显示每个字符*/
void display_one_by_one(char *string, int display_ms, int length)
{
        /*将显示时间除以字符串长度,获得每个字符的显示速度*/
        int display_ms_one=display_ms/length;
         
        while (*string!='\0') {
                printf("%c", *string++);
                fflush(stdout);
                sleep(display_ms_one);
        }
}
 
/*隔特定时间消去每个字符*/
void disappear_one_by_one(int disappear_ms, int length)
{
        /*将消失时间除以字符串长度,获得每个字符的消失速度*/
        int disappear_ms_one=disappear_ms/length;
        int i=0;
         
        for (;i<=length;i++) {
                printf("\b \b");
                fflush(stdout);
                sleep(disappear_ms_one);
        }
}
庸人误我 发表于 2019-11-5 21:36
你看一下第一次的回帖吧!大哥,你的display_ms没有赋值的,disappear_ms接收了两次

免费评分

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

查看全部评分

 楼主| mxwawaawxm 发表于 2019-11-5 21:50
庸人误我 发表于 2019-11-5 21:36
你看一下第一次的回帖吧!大哥,你的display_ms没有赋值的,disappear_ms接收了两次

居然又犯了如此低端的错误,谢谢。

免费评分

参与人数 1吾爱币 +1 收起 理由
庸人误我 + 1 用心讨论,共获提升!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-27 00:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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