真心求指教

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;
}
但是输入测试数据之后为什么没有输出呢
...全文
213 19 打赏 收藏 转发到动态 举报
写回复
用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;     
}

69,373

社区成员

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

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