| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 974 人关注过本帖
标题:求助 这个程序错在哪儿啊
只看楼主 加入收藏
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
结帖率:88.89%
收藏
 问题点数:0 回复次数:14 
求助 这个程序错在哪儿啊

以下是一个将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来的一个程序。例如:输入“skk345klja98lkd156”,则产生345 98 156 。
这是书上的例子。因为有错,我修改了一些。但是还有两个错误。在程序中注明了。
请大侠指教。
先谢谢了哈。

对了,我还留了个附件,是*.c格式的这个文件。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define len 256 /* 原例子是#define LEN 256 */
int getline(char *s,int len); /*这里出现了声明语法错误*/

void main()
{
char line[len],b[20],*ptr1,*ptrb; /* 原例子是char line[LEN],b[20],*ptr1,*ptrb; */
int n=0,j,a[50];
clrscr();
getline(line,len);
ptr1=line;
while(*ptr1!='\0')
{
ptrb=b;
for(j=0;*ptr1>='0'&&*ptr1<='9';ptr1++,ptrb++,j++)
*ptrb=*ptr1;
if(j>0)
{
*ptrb='\0';
*(a+n)=atoi(b);
n++;
}
if(*ptr1!='\0')
ptr1++;
}
printf("output number:\n");
for(j=0;j<n;j++)
printf("%d\n",*(a+j));
getch();
}


int getline(char *s,int len) /*这里又出现了声明语法错误*/

{
int c;
printf("input number:");
char *p=s;
while(--len>0&&(c=getchar())!='\n') /* len 是常量, 怎么能用 --len 了?*/
*s++=c;
*s='\0';
return (s-p); /*请高手告诉我这两个指针相减表示的是什么啊? 这里我看不懂啊,请指教啊*/
}

搜索更多相关主题的帖子: include 字符串 用户 
2007-04-16 16:05
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
对了。我用的是turboC2.0 ,老是编译通不过。请高手指教啊,在线等啊。
2007-04-16 16:08
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
收藏
得分:0 
#define len 256 /* 原例子是#define LEN 256 */
int getline(char *s,int len); /*这里出现了声明语法错误*/

常量名跟函数声明里的参数名一样了
int getline(char *s,int len); 相当于 int getline(char *s,int 256);

用#define 定义常量名最好用全大写字母

猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-04-16 16:15
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
return (s-p);  返回的是字符串长度..

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-04-16 16:22
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 

谢谢了。请问3楼的老哥,书上的原例就是用的大写:

第四行: #define len 256 /* 原例子是#define LEN 256 */
第八行: char line[len],b[20],*ptr1,*ptrb; /* 原例子是char line[LEN],b[20],*ptr1,*ptrb; */

可是这样出了更多的错啊?
具体的我记不清了。请能不能帮我把这个程序调通啊?

谢谢了。

2007-04-17 08:53
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
请问4楼的老哥:我可不可以这样理解:返回两指针相减的值都是返回字符串的长度呢?


2007-04-17 08:55
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
谢谢了,再一次向阅读、关心、回复的高手们致谢!

昨天因为临时出差了,所以现在才回来看。
2007-04-17 08:58
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
收藏
得分:0 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define LEN 256 /* 原例子是#define LEN 256 */
int getline(char *s,int len); /*这里出现了声明语法错误*/

void main()
{
char line[LEN],b[20],*ptr1,*ptrb; /* 原例子是char line[LEN],b[20],*ptr1,*ptrb; */
int n=0,j,a[50];
clrscr();
getline(line,LEN);
ptr1=line;
while(*ptr1!='\0')
{
ptrb=b;
for(j=0;*ptr1>='0'&&*ptr1<='9';ptr1++,ptrb++,j++)
*ptrb=*ptr1;
if(j>0)
{
*ptrb='\0';
*(a+n)=atoi(b);
n++;
}
if(*ptr1!='\0')
ptr1++;
}
printf("output number:\n");
for(j=0;j<n;j++)
printf("%d\n",*(a+j));
getch();
}


int getline(char *s,int len) /*这里又出现了声明语法错误*/

{
int c;
printf("input number:");
char *p=s;
while(--len>0&&(c=getchar())!='\n') /* len 是常量, 怎么能用 --len 了?*/
*s++=c;
*s='\0';
return (s-p); /*请高手告诉我这两个指针相减表示的是什么啊? 这里我看不懂啊,请指教啊*/
}

改成這樣后在C-FREE3.5上運行通過

返回两指针相减的值都是返回字符串的长度呢? 不一定都是返回字符串的長度

比如
int arr[20];
int *p = &arr[5];
int *q = &arr[10];
int result = q - p;
// 此時result的值爲5,即p所指地址与q所指地址之間能容納的int數據個數


猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-04-17 09:09
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 


谢谢。我明白你讲的两指针相减的意思了。

但是,哥啊。我还是晕了。因为我在TurboC2.0中还是没有通过。但是我还是先谢谢你了。你能不能再帮我分析一下。以下是出错信息:


compliting C:\qufen.c:
error C:\tc\qufen.c: 40: Expression syntax in function getline
error C:\tc\qufen.c: 44: undefined symbol 'p' in function getline
Warning C:\tc\qufen.c: Non-portable pointer conversion in function getline



我快疯了啊。
是不是我的编译器有问题哦?

谢谢。
2007-04-17 10:21
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
收藏
得分:0 
printf("input number:");
char *p=s;

改成

char *p=s;
printf("input number:");
试试

好像TC2.0的变量只能在函数首部声明

猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-04-17 10:36
快速回复:求助 这个程序错在哪儿啊
数据加载中...
 
   



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

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