向大神请问一个读取数字字母串的程序,不知道错在哪里,多谢了

向大神请教一个读取数字字母串的程序,不知道错在哪里,谢谢了
本帖最后由 Mr_Succulent 于 2015-03-29 19:30:00 编辑
这个程序本意是想从文本文件的各行文本中读取任意个数据,逐行输出获取的有效数据,需要读取的数据为整型数或者仅含字母的字符串。数据的个数和顺序是随机的

我是想先用getNum获取整型数,然后用getStr获得字符串,但这两个源程序是c语言里没有的,我自己写的可能有错但不知道错在哪里。后面的应该没问题,关键是这两个函数啊。快哭了,求大神帮忙看看

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define LINE 80

void getNum(char *buf, int *k, int *num)
{
int sign=1;
/* 以下程序用来获取整型数*/
if(buf[*k]=='-')
{
sign=-1;(*k)++;
}
*num=0;
while(isdigit(buf[*k]))
{
*num=*num*10+buf[*k]-'\0';
*k++;
}
*num*=sign;
}

void getStr(char *buf, int *k, char *str)
{
int i=0;
/* 以下程序用来获取字符串*/
while(isalpha(buf[*k]))
{
str[i]=buf[*k];
(*k)++;
i++;
}
str[i]='\0';
}

void getData(char *buf, int *nNum, int num[], int *nStr, char str[][20])
{
int k;
k=0;
while(buf[k])
{
while(buf[k] == ' ' || buf[k] == '\t')
k++;
if(isdigit(buf[k]) || buf[k] == '-')
/* 调用getNum函数,获取整型数*/
getNum(buf,&k,num);
else if(isalpha(buf[k]))
/* 调用getStr函数,获取字符串*/
getStr(buf,&k,*str);
while(buf[k] != ' ' && buf[k] != '\t' && buf[k] != '\0')
k++;
}
}

void main()
{
FILE *fp;
char buf[LINE], inFile[20];
int  i, nNum, num[10], nStr;
char str[10][20];
printf("请输入文件名: ");
scanf("%s", inFile);
if((fp = fopen(inFile, "r")) == NULL)
{
printf("无法打开文件\n", inFile);
system("pause");
exit(0);
}
while( fgets(buf, LINE, fp) )
{
printf("获取文本: %s", buf);
nNum = nStr = -1;
getData(buf, &nNum, num, &nStr, str);
for(i=0; i<=nNum; )
printf("整型数 %d: %d\n", ++i, num[i]);
for(i=0; i<=nStr; )
printf("字符串 %d: %s\n", ++i, str[i]);
}
}
/*
请输入文件名: exe2-3File.txt
获取文本:   -2 abc 8    string
整型数 1: -2
整型数 2: 8
字符串 1: abc
字符串 2: string
获取文本:
获取文本: 8     china  6  9  printf("
整型数 1: 8
整型数 2: 6
整型数 3: 9
字符串 1: china
字符串 2: printf
获取文本:    4    6 fudan6 3  stracosed
整型数 1: 4
整型数 2: 6
整型数 3: 3
字符串 1: fudan
字符串 2: stracosed
*/

------解决思路----------------------
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define LINE 80

void getNum(char *buf, int *k, int *num)
{
int sign=1;
/* 以下程序用来获取整型数*/
if(buf[*k]=='-')
{
sign=-1;(*k)++;
}
*num=0;
while(isdigit(buf[*k]))
{
*num=*num*10+buf[*k]-'\0';
(*k)++;/*差个括号*/
}
*num*=sign;
}

void getStr(char *buf, int *k, char *str)
{
int i=0;
/* 以下程序用来获取字符串*/
while(isalpha(buf[*k]))
{
str[i]=buf[*k];
(*k)++;
i++;
}
str[i]='\0';
}

void getData(char *buf, int *nNum, int num[], int *nStr, char str[][20])
{
int k;
k=0;
while(buf[k])
{
while(buf[k] == ' ' 
------解决思路----------------------
 buf[k] == '\t')
k++;
if(isdigit(buf[k]) 
------解决思路----------------------
 buf[k] == '-')
/* 调用getNum函数,获取整型数*/
getNum(buf,&k,num);
else if(isalpha(buf[k]))
/* 调用getStr函数,获取字符串*/
getStr(buf,&k,*str);
while(buf[k] != ' ' && buf[k] != '\t' && buf[k] != '\0')
k++;
}
}

void main()
{
FILE *fp;
char buf[LINE], inFile[20];
int  i, nNum, num[10], nStr;
char str[10][20];
printf("请输入文件名: ");
scanf("%s", inFile);
if((fp = fopen(inFile, "r")) == NULL)
{
printf("无法打开文件\n", inFile);
system("pause");
exit(0);
}
while( fgets(buf, LINE, fp) )
{
printf("获取文本: %s", buf);
nNum = nStr = -1;
getData(buf, &nNum, num, &nStr, str);
for(i=0; i<=nNum; )
printf("整型数 %d: %d\n", ++i, num[i]);
for(i=0; i<=nStr; )
printf("字符串 %d: %s\n", ++i, str[i]);
}
}
/*
请输入文件名: exe2-3File.txt
获取文本:   -2 abc 8    string
整型数 1: -2
整型数 2: 8
字符串 1: abc
字符串 2: string
获取文本:
获取文本: 8     china  6  9  printf("
整型数 1: 8
整型数 2: 6
整型数 3: 9
字符串 1: china
字符串 2: printf
获取文本:    4    6 fudan6 3  stracosed
整型数 1: 4
整型数 2: 6
整型数 3: 3
字符串 1: fudan
字符串 2: stracosed
*/



另外需要加上输出语句,不然你的getNum两个函数没有输出