c语言,怎么运行不出结果呢 20
/*给出一个完整的句子,这个句子中不包含不可见字符或者空格,于是在这个句子中有许多不同的单词。一个单词是指一串连续的最长的英文字母(大写或小写)。例如"#abc#"中,"...
/*给出一个完整的句子,这个句子中不包含不可见字符或者空格,于是在这个句子中有许多不同的单词。一个单词是指一串连续的最长的英文字母(大写或小写)。
例如"#abc#"中,"abc"就是一个单词,而"ab","bc"都不算单词。
【输入】输入文件名"word.in"
输入一个句子,只包含可见字符(不包含空格)。句子长度不超过 100。
【输出】输出文件名"estdout.pc2"
按单词出现的顺序输出不同的单词。如果一个单词出现多次则只有第一次出现时输出。
程序运行后结果示例:
【样例输入】
Wa_Study_Wa_Everyday_Wa_Daxia
【样例输出】
Wa
Study
Everyday
Daxia
*/
#include <stdio.h>
#include <string.h>
#include<ctype.h>
#define MAX 100
int main()
{
freopen("word.in.txt","r",stdin);
//freopen("estdout.pc2.txt","w",stdout);
char dic[MAX][MAX]={'\0'},word[MAX]={'\0'},s[MAX];
int i,k,j=0,num=0,inword=0,m=0;
gets(s);
//s[]中单词个数: num
for(i=0; s[i]!='\0'; i++)
{
if( isalpha(s[i]) )
word[j++]=s[i]; //从s[]析取单词到word[i]
else
if(!inword)
{
word[j]='\0';
for(k=0;k<=m;k++)
if(strcmp(dic[m],word)==0) break;
strcpy(dic[m++],word);
}
j=0;
inword=0;
}
for(i=0;i<m;i++)
puts(dic[i]);
return 0;
} 展开
例如"#abc#"中,"abc"就是一个单词,而"ab","bc"都不算单词。
【输入】输入文件名"word.in"
输入一个句子,只包含可见字符(不包含空格)。句子长度不超过 100。
【输出】输出文件名"estdout.pc2"
按单词出现的顺序输出不同的单词。如果一个单词出现多次则只有第一次出现时输出。
程序运行后结果示例:
【样例输入】
Wa_Study_Wa_Everyday_Wa_Daxia
【样例输出】
Wa
Study
Everyday
Daxia
*/
#include <stdio.h>
#include <string.h>
#include<ctype.h>
#define MAX 100
int main()
{
freopen("word.in.txt","r",stdin);
//freopen("estdout.pc2.txt","w",stdout);
char dic[MAX][MAX]={'\0'},word[MAX]={'\0'},s[MAX];
int i,k,j=0,num=0,inword=0,m=0;
gets(s);
//s[]中单词个数: num
for(i=0; s[i]!='\0'; i++)
{
if( isalpha(s[i]) )
word[j++]=s[i]; //从s[]析取单词到word[i]
else
if(!inword)
{
word[j]='\0';
for(k=0;k<=m;k++)
if(strcmp(dic[m],word)==0) break;
strcpy(dic[m++],word);
}
j=0;
inword=0;
}
for(i=0;i<m;i++)
puts(dic[i]);
return 0;
} 展开
展开全部
你这个程序问题很多:
首先:对于你的问题“为什么不输出”答案是你这里的判断
if(strcmp(dic[m],word)==0) break;
问题成立的,因为你的if……else……后面总是
j=0;
然后在进入else的时候
word[j]='\0';
这样word中一直都是空字符串,你把 j=0这句放到 strcpy(dic[m++],word);后面就可以输出了。
其次,即使这样改,你的逻辑还是有问题的,因为for循环的结束条件是s[i]!='\0';拿 aaa_bbb这个字符串来说,你的程序只能输出aaa,因为最终字符串循环完的时候,for循环直接结束了,你的bbb没有加到dic中去。
你这里用do{……}while(s[i]!='\0');去循环就没有问题了,这个循环比for循环多一次,正好把你漏掉的加进来了。
最后,刚开始编程最好养成好的编码习惯,你程序中很多变量没有用到,比如,你的inword变量一直是0,没有必要定义,编码格式也要规范些,这些小习惯其实挺重要的。
展开全部
我对你的程序进行了以下操作:
首先是把所有的float类型都改成了double
然后在你的程序前面加上
#include
#include
这两个头文件
再在程序主体部分的
while((T[25]=15))
循环体内一进循环体的位置加上
cout<<T[25]<<"|"<<T[25]-T[0]<<endl;
getch();
这两句话
运行程序得到结果:
20|0
1.#QNAN|1.#QNAN
1.#QNAN|1.#QNAN
1.#QNAN|1.#QNAN
...
说明进入while循环体后进行了一系列操作后T[25]的数据就变成了非法数据
所以我估计是你的while里面的那些公式带的有问题或者怎么样,总之
while((T[25]=15))
条件永远不可能不成立即永远不可能跳出循环体,当然就卡在那里得不到结果了(即所谓的死循环)
因为对你题目要求的公式不太清楚,所以也不好检查你的程序,总之个人感觉就是你的公式带的有问题,T[0]~T[25]计算方法有问题,自己仔细检查下。
首先是把所有的float类型都改成了double
然后在你的程序前面加上
#include
#include
这两个头文件
再在程序主体部分的
while((T[25]=15))
循环体内一进循环体的位置加上
cout<<T[25]<<"|"<<T[25]-T[0]<<endl;
getch();
这两句话
运行程序得到结果:
20|0
1.#QNAN|1.#QNAN
1.#QNAN|1.#QNAN
1.#QNAN|1.#QNAN
...
说明进入while循环体后进行了一系列操作后T[25]的数据就变成了非法数据
所以我估计是你的while里面的那些公式带的有问题或者怎么样,总之
while((T[25]=15))
条件永远不可能不成立即永远不可能跳出循环体,当然就卡在那里得不到结果了(即所谓的死循环)
因为对你题目要求的公式不太清楚,所以也不好检查你的程序,总之个人感觉就是你的公式带的有问题,T[0]~T[25]计算方法有问题,自己仔细检查下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询