自學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;
}
|