| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖
标题:《C语言入门经典》中的一个程序,请高手指点一下!
只看楼主 加入收藏
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const size_t BUFFER_LEN = 6;
const size_t NUM_P = 2;

int main( void )
{
    char buffer[BUFFER_LEN];
    char *ps[NUM_P];
    char *pbuffer = buffer;
    int i;
    for ( i = 0; i < NUM_P; i++ ) ps[i] = NULL;
    printf( "\nYou can enter up to %u messages each up to %u characters.",
            NUM_P, BUFFER_LEN - 1 );
    for ( i = 0; i < NUM_P; i++ ) {
        pbuffer = buffer;
        printf( "\nEnter %s message, or press Enter to end\n",
                i > 0 ? "another" : "a" );
        while ( ( pbuffer - buffer < BUFFER_LEN ) &&
                ( ( *pbuffer++ = getchar() ) != '\n' ) );
        if (*(pbuffer-1) == '\n') {
            *(pbuffer-1) = 0;
            if ( ( pbuffer - buffer ) < 2 )
                break;
        } else if ( ( pbuffer - buffer ) >= BUFFER_LEN ) {
            printf( "String too long - maximum %d characters allowed.",
                    BUFFER_LEN );
            i--;
            continue;
        } else *pbuffer++ = 0;
        ps[i] = ( char * )malloc( pbuffer - buffer );
        if ( ps[i] == NULL ) {
            printf( "\nOut of memory - ending program." );
            return 1;
        }
        strcpy( ps[i], buffer );
    }
    printf( "\nIn reverse order, the strings you entered are:\n" );
    while ( --i >= 0 ) {
        printf( "\n%s", ps[i] );
        free( ps[i] );
        ps[i] = NULL;
    }
    printf( "\n\n" );
    return 0;
}

现修改如上。今天头脑好像有些晕乎,见谅。


[ 本帖最后由 top398 于 2014-5-13 17:24 编辑 ]
2014-05-13 17:22
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
测试结果:
程序代码:
R:\>a

You can enter up to 2 messages each up to 5 characters.
Enter a message, or press Enter to end
abcde

Enter another message, or press Enter to end
fghij

In reverse order, the strings you entered are:

fghij
abcde


R:\>a

You can enter up to 2 messages each up to 5 characters.
Enter a message, or press Enter to end
abcdefghijklmn
String too long - maximum 6 characters allowed.
Enter a message, or press Enter to end
String too long - maximum 6 characters allowed.
Enter a message, or press Enter to end

Enter another message, or press Enter to end
12345

In reverse order, the strings you entered are:

12345
mn


getchar()并非一个理想的键盘输入函数,因为它是基于缓冲区的,只有当按下回车时才回馈给请求输入的程序。
2014-05-13 17:28
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
收藏
得分:0 
回复 12 楼 top398
非常感谢你耐心细致的回复,群里的高手很多,大多不屑于回复我们这些菜鸟的低级问题,即使回复也是三言两语,雾里看花,由衷敬佩你不吝指教的精神,希望以后有问题还能向你请教!
2014-05-14 08:56
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 13 楼 chrisgardner
对,就是这帮高手的事,回复还不好好回复,三言两语的

总有那身价贱的人给作业贴回复完整的代码
2014-05-14 09:10
lbc_77
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-10-9
收藏
得分:0 
回复 9楼 top398
楼主厉害!解答了我心中的疑问。
2016-10-09 21:46
快速回复:《C语言入门经典》中的一个程序,请高手指点一下!
数据加载中...
 
   



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

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