找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1098|回复: 2
打印 上一主题 下一主题
收起左侧

C语言程序缺陷 用户输入一段字符串,和一个数字n,提取其中的前n个单词,望大佬指点

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:879924 发表于 2021-12-27 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自学C语言遇到的问题,
两个问题:
1.现在比如输入a a a然后输入3,只能打印2个a,但是如果输入a a a 然后输入3,就可以打印3个a。我觉得原因是因为j在遇到' '或'\t'才会自增,但如果超过MAXSIZE或者遇到最后一个单词,后面就没有' '或'\t'了,所以就不自增,造成少1个输出,是这个原因吗?需要如何修复这个bug呢?
2.在本例中,关于2维字符数组的传参问题,如何使用指针的形式传递呢?形参和实参分别需要如何写?
谢谢

C语言源程序如下:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXSIZE 21

int total_count=0;
int fgetsnword(char word_arr[][MAXSIZE],char input_string[],int n);
int main(void)
{
        int n;        char* chr;
        extern int total_count;
        char input_string[MAXSIZE];        char word_arr[MAXSIZE][MAXSIZE];
        while(1)
        {
                printf("请输入一行字符串,单词间用空格分开,最多%d位!\n",MAXSIZE-1);
                fgets(input_string,MAXSIZE,stdin);
                if(chr=strchr(input_string,'\n'))
                        *chr='\0';
                else
                        while(getchar()!='\n');        
               
                printf("您输入的字符串是\n%s\n",input_string);

                printf("请输入你想提取的单词个数!\n");

                while(scanf("%d",&n)!=1)
                {
                        printf("输入错误,请重新输入:\n");
                        getchar();
                }        
                total_count=fgetsnword(word_arr,input_string,n);        
                printf("提取出每一个单词如下:\n");
                for(int i=0;i<total_count;i++)
                {
                        puts(word_arr[ i]);
                }

                while(getchar()!='\n');        
        }
        return 0;
}


int fgetsnword(char word_arr[][MAXSIZE],char input_string[],int n)
{
        extern int total_count;
        int i=0,j=0,k=0;
        int flag=1;
        while((j<n)&&(i<strlen(input_string))&&(i<MAXSIZE))
        {
                if((input_string[ i]==' '||input_string[ i]=='\t')&&(flag==1))
                {
                        i++;
                        continue;
                }
                if(input_string[ i]==' '||input_string[ i]=='\t')
                {
                        while(input_string[ i]==' '||input_string[ i]=='\t')
                                i++;
                        word_arr[j][k] = '\0';
                        j++;
                        k=0;
                }
               
               
                word_arr[j][k] = input_string[ i];
               
                i++;
                k++;
                flag=0;
        }
        word_arr[j][k] = '\0';
        total_count=j;        //后面不加空格的话,少一个输出        
        return total_count;
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:276663 发表于 2021-12-27 21:52 | 只看该作者
printf("%.5s",s);
回复

使用道具 举报

板凳
ID:301191 发表于 2021-12-29 02:33 | 只看该作者
顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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