真心求指教

stack009 2012-11-14 10:05:53
一个小程序:将输入中包含字符串“ould”的各行打印出来,这是小弟的代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 100 /*最大输入行长度*/
int getline(char line[],int max);
int strindex(char source[], char searchfor[]);
char pettern[] = "ould"; /* 待查找的模式 */

int main()
{
char line[MAXLINE];
int found = 0;

while (getline(line , MAXLINE) > 0)
if (strindex(line,pettern) >= 0){
printf ("%s", line);
found++;
}

system("pause");
return found;
}
/* GETLINE函数:将行保存到S中,并返回该行的长度 */
int getline(char s[], int lim)
{
int c,i;
i = 0;
while( --lim > 0 && (c = getchar () != EOF) && c != '\n')
s[i++] = c;
if ( c == '\n')
s[i++] = c;
s[i++] = '\0';
return i;
}

/* strindex函数:返回T在S中的位置;若未找到则返回-1 */
int strindex(char s[], char t[])
{
int i,j,k;

for(i = 0; s[i] != '\n'; i++)
{
for (j=i,k=0;t[k]!='\0'&& s[j] == t[k]; j++, k++)
;
if( k > 0&& t[k] == '\0')
return i;
}
return -1;
}
但是输入测试数据之后为什么没有输出呢
...全文
218 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-11-17
  • 打赏
  • 举报
回复
引用 18 楼 stack009 的回复:
引用 7 楼 ganpengjin1 的回复:C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include<stdio.h>#include<stdlib.h>#define MAXLINE 100 ……
你要输入多句,请用多为数组或者文件处理吧!
stack009 2012-11-17
  • 打赏
  • 举报
回复
引用 7 楼 ganpengjin1 的回复:
C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include<stdio.h>#include<stdlib.h>#define MAXLINE 100 /*最大输入行长度*/int getline(……
你这程序的功能只是在输入的语句中第一次输入OULD的时候它就停下来了
stack009 2012-11-17
  • 打赏
  • 举报
回复
引用 7 楼 ganpengjin1 的回复:
C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include<stdio.h>#include<stdlib.h>#define MAXLINE 100 /*最大输入行长度*/int getline(……
你这代码也只能输入一句输出一句,例如我在第一句就输入了含OULD的句子,那么按下回车后它马上就输出了该句,并不能达到输入多行以后再判定的结果啊
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
我说得是请用楼主的源程序,亲
转角天边 2012-11-15
  • 打赏
  • 举报
回复
引用 11 楼 ganpengjin1 的回复:
引用 9 楼 anhuizhuanjiao 的回复:引用 5 楼 ganpengjin1 的回复:引用 2 楼 stack009 的回复:引用 1 楼 anhuizhuanjiao 的回复:getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char ……
自己可以运行看
转角天边 2012-11-15
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 100 /*最大输入行长度*/
int getline(char line[],int max);
int strindex(char source[], char searchfor[]);
char pettern[] = "ould"; /* 待查找的模式 */

int main()
{
char line[MAXLINE];
int found = 0;

while (getline(line , MAXLINE) > 0)
if (strindex(line,pettern) >= 0){
printf ("字符串符合条件%s\n", line);
found++;
}
else
{
printf("字符串不符合条件\n");
}

system("pause");
return found;
}
/* GETLINE函数:将行保存到S中,并返回该行的长度 */
int getline(char s[], int lim)
{
char c;
int i;
i = 0;

while( --lim > 0 )
{
c=getchar();
if(c != '\n')
s[i++] = c;
else
break;
}
s[i++] = '\0';
return i;
}

/* strindex函数:返回T在S中的位置;若未找到则返回-1 */
int strindex(char s[], char t[])
{
int i,j,k;

for(i = 0; s[i] != '\n'; i++)
{
for (j=i,k=0;t[k]!='\0'&& s[j] == t[k]; j++, k++)
;
if( k > 0&& t[k] == '\0')
return i;
}
return -1;
}


这是运行结果,自己看
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
引用 9 楼 anhuizhuanjiao 的回复:
引用 5 楼 ganpengjin1 的回复:引用 2 楼 stack009 的回复:引用 1 楼 anhuizhuanjiao 的回复:getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char c; int i; i = 0; ……
+上这条,与我上面的一起看while (getline(line , MAXLINE) > 0)
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
引用 9 楼 anhuizhuanjiao 的回复:
引用 5 楼 ganpengjin1 的回复:引用 2 楼 stack009 的回复:引用 1 楼 anhuizhuanjiao 的回复:getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char c; int i; i = 0; ……
s[i++] = '\0';你看看这条语句再说吧!!
转角天边 2012-11-15
  • 打赏
  • 举报
回复
引用 5 楼 ganpengjin1 的回复:
引用 2 楼 stack009 的回复:引用 1 楼 anhuizhuanjiao 的回复:getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char c; int i; i = 0; while( --lim > ……
谁说是死循环了

if(c != '\n')
     s[i++] = c;
else
     break;
c=='\n'就跳出循环了
buyong 2012-11-15
  • 打赏
  • 举报
回复
把getline换成标准的scanf或者cin多好
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 100  /*最大输入行长度*/
int getline(char line[],int max);
int strindex(char source[], char searchfor[]);
char pettern[] = "ould"; /* 待查找的模式  */

int main()
{
	char line[MAXLINE];
	int found = 0;

	while (getline(line , MAXLINE) > 0)
		if (strindex(line,pettern) >= 0){
			printf ("%s\n", line);
			found++;      
		}
		system("pause");
		return found;   
} 
/*  GETLINE函数:将行保存到S中,并返回该行的长度  */
int getline(char s[], int lim)
{
	int c,i;  
	i = 0;

	while( --lim > 0 && ( (c = getchar()) != EOF) && (c != '\n'))
	{
		s[i++] = c;
	}
	if ( c == '\n' || c == EOF) //添加部分代码
		//s[i++] = c;
	s[i] = '\0';
	return i;     
}

/* strindex函数:返回T在S中的位置;若未找到则返回-1 */
int strindex(char s[], char t[])
{
	int i,j,k;

	for(i = 0; s[i] != '\0'; i++) //修改处
	{
		for (j=i,k=0;(t[k] != '\0' && s[j] == t[k]); j++, k++);
		//if( k > 0&& t[k] == '\0')//不要k>0;
			if(t[k] == '\0')
			{
				return i;  
			}		  
	}  
	return -1;
}
//分给我把
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
我给你弄一下
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
引用 2 楼 stack009 的回复:
引用 1 楼 anhuizhuanjiao 的回复:getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char c; int i; i = 0; while( --lim > 0 ) { c=ge……
都要死循环了!i++
stack009 2012-11-15
  • 打赏
  • 举报
回复
但是我这写的程序为什么输入一行就马上输出呢,为什么不能输入多行之后再判定吗
stack009 2012-11-15
  • 打赏
  • 举报
回复
以后还是自己多花时间找找了在发帖问问,汗颜啊,我找到错误了,欢迎各位还有更好的方法尽管贴出来,要不然这分就浪费了
stack009 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 anhuizhuanjiao 的回复:
getline函数有问题 C/C++ code?123456789101112131415161718int getline(char s[], int lim){ char c; int i; i = 0; while( --lim > 0 ) { c=getchar(); if(c != '……
这样写不满足要求呢,你只能输入输出一行的
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
漫步者、 2012-11-15
  • 打赏
  • 举报
回复
引用 12 楼 anhuizhuanjiao 的回复:
C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include<stdio.h>#include<stdlib.h>#define MAXLINE 100 /*最大输入行长度*/……
骚年,你的程序退出了吗?出现了两次按任意键继续吗?
转角天边 2012-11-14
  • 打赏
  • 举报
回复
getline函数有问题

int getline(char s[], int lim)
{
	char c;
	int  i;  
	i = 0;
	
	while( --lim > 0 )
	{
		c=getchar();
		if(c != '\n')
			s[i++] = c;
		else
			break;
	}
	s[i++] = '\0';
	return i;     
}
没事干搞了个任务管理器的源码 其实论坛有很多,相比那些新更新了 取进程的CPU占用率和判断进程是否暂停 可以监视进程创建与退出 以前的取CPU占用率不准了,就从C源码里翻出来的,可能比系统任务管理器中的显示的小一点,可能是使用的 四舍五入 处理过了吧 以前一直不知道怎么判断进程是否暂停 后来才知道是通过判断主线程的状态来处理的 RING3 下基本可以完成需要的功能,相比 RING0 下就是权限有限一些特殊的操作做不到 这几天正在搞驱动,监视进程创建与退出,进程方面的操作基本都搞好了 原来在 RING0下搞进程保护和隐藏什么的几行代码就能做到了 微软也为驱动提供了很多接口,像监视进程,模块,线程,文件,注册表,网络 都很方便,真心的强大。 昨天又找了份UDP网络的C源码,可以在驱动里创建内核级的 UDP,方便驱动能及时的给我的程序发送数据, 之前用的是 共享事件,但是会有延迟,不是很稳定,用这个就好多了 当然也支持TCP的客户端和服务端,能在内核里创建个服务器来用,虽然有源码,但是代码太多,还没看懂了 现在的系统都开启的强制签名验证,没签名的驱动都无法加载,还好前几天经过高人的指教把这个问题解决了 现在只要把代码的兼容性做好,就能在很多系统里使用了 昨天测试了几种系统,都可以正常的运行,哈哈。 虽然我搞驱动才几天,但是C源码比较多,学起来还是挺方便,大家遇到难题,可以去找找C源码看看。
没事干搞了个任务管理器的源码 其实论坛有很多,相比那些新更新了 取进程的CPU占用率和判断进程是否暂停 可以监视进程创建与退出 以前的取CPU占用率不准了,就从C源码里翻出来的,可能比系统任务管理器中的显示的小一点,可能是使用的 四舍五入 处理过了吧 以前一直不知道怎么判断进程是否暂停 后来才知道是通过判断主线程的状态来处理的 RING3 下基本可以完成需要的功能,相比 RING0 下就是权限有限一些特殊的操作做不到 这几天正在搞驱动,监视进程创建与退出,进程方面的操作基本都搞好了 原来在 RING0下搞进程保护和隐藏什么的几行代码就能做到了 微软也为驱动提供了很多接口,像监视进程,模块,线程,文件,注册表,网络 都很方便,真心的强大。 昨天又找了份UDP网络的C源码,可以在驱动里创建内核级的 UDP,方便驱动能及时的给我的程序发送数据, 之前用的是 共享事件,但是会有延迟,不是很稳定,用这个就好多了 当然也支持TCP的客户端和服务端,能在内核里创建个服务器来用,虽然有源码,但是代码太多,还没看懂了 现在的系统都开启的强制签名验证,没签名的驱动都无法加载,还好前几天经过高人的指教把这个问题解决了 现在只要把代码的兼容性做好,就能在很多系统里使用了 昨天测试了几种系统,都可以正常的运行,哈哈。 虽然我搞驱动才几天,但是C源码比较多,学起来还是挺方便,大家遇到难题,可以去找找C源码看看。 最后再说下易语言,很长时间才更新一次,还是小修小补的,大家需要的,核心的基本没动过,真的脱节的太多了,什么时候能发发善心来波大的。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧