我做了个C程序,输入英文的星期几,输出阿拉伯数字的星期几,但除了星期3行,别的都不行.

我把程序复制在下面,请高手看看问题在哪里,请不要做一个功能一样的程序给我,我只想知道我错在哪里了。另注意:如果输入的单词拼写不对,输出“你英语真烂”。#include<s... 我把程序复制在下面,请高手看看问题在哪里,请不要做一个功能一样的程序给我,我只想知道我错在哪里了。另注意:如果输入的单词拼写不对,输出“你英语真烂”。
#include<stdio.h>

int main()
{
char day[10],weekday[7][10]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
int i,j,k;

printf("Please enter the day:");
gets(day);

for(i=0;i<7&&k;i++)
{
for(j=0,k=0;j<10;j++)
{
if(day[j]!=weekday[i][j])
{
k=1;
break;
}
}
}
if(k)
printf("Your english is so poor!!!");
else
printf("星期%d",i);

}
展开
 我来答
mjwgs
2011-10-29 · TA获得超过281个赞
知道小有建树答主
回答量:132
采纳率:100%
帮助的人:117万
展开全部
for(j=0,k=0;j<10;j++) 这句错了,按照条件,j<10都会进行 if(day[j]!=weekday[i][j] 的判断,那么很明显,除了星期三的单词长度刚好满足这一条件,其他的都不满足,所以才会出现上述错误,代码修改如下即可。
#include<stdio.h>
#include <string.h> //需要使用strlen()函数
void main() //没有返回值,用void
{
char day[10],weekday[7][10]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
int i,j,k;

printf("Please enter the day:");
gets(day);

for(i=0;i<7&&k;i++)
{
int l;
l=strlen(day);
/*#include <string.h>
size_t strlen( char *str );
功能:函数返回字符串str 的长度( 即空值结束符之前字符数目)。
*/
for(j=0,k=0;j<l;j++)//由单词长度决定判断次数
{
if(day[j]!=weekday[i][j])
{
k=1;
break;
}
}
}
if(k)
printf("Your english is so poor!!!");
else
printf("星期%d",i);

}
追问
就                       if(day[j]!=weekday[i][j])
{
k=1;
break;
}
最多判定2次,为什么要用strlen(day)来限定,这里小弟不解,还望不吝赐教。
hongyaofu
2011-10-29 · TA获得超过1088个赞
知道大有可为答主
回答量:1227
采纳率:87%
帮助的人:518万
展开全部
这个地方有问题:for(j=0,k=0;j<10;j++)
不能是j<10,应该写成这样
int len;
len=strlen(day);
for(j=0,k=0;j<len;j++)
就可以了,其实不要你这样写。
用strcmp()直接比较即可。

#include<stdio.h>
int main()
{
char day[10],weekday[7][10]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
int i,j,k;

printf("Please enter the day:");
gets(day);
for(i=0;i<7;i++)
{
k=strcmp(day,weekday[i]);
if(k==0)
break;
}
i++;
if(i>7)
printf("Your english is so poor!!!\n");
else
printf("星期 %d !\n",i);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
说实话oX
2011-10-29 · TA获得超过312个赞
知道小有建树答主
回答量:402
采纳率:0%
帮助的人:402万
展开全部
的确,你的k没有赋初值。我把我自己编写的程序给你,·大同小异,你参考一下:
#include<stdio.h>
main()
{
char a,b,zl[7][10]={"Monday","Tuesday","Wendesday","Thursday","Friday","Saturday","Sunday"};
int i=7;
printf("input the character:\n");
for(;i==7;){
scanf("%c",&a);
if(a>='a'&&a<='z')a=a-32;
switch(a)
{
case 'M':i=0;break;
case 'T':printf("input a charater again:");scanf("\n%c",&b);if(b='u')i=1;else i=3;break;
case 'W':i=2;break;
case 'F':i=4;break;
case 'S':printf("input a charater again:");scanf("\n%c",&a);if(a=='a')i=5;else i=6;break;
}
}//for
printf("%s\n",zl[i]);
}
这是我才编的,你可看一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lcw0622
2011-10-29 · TA获得超过627个赞
知道小有建树答主
回答量:454
采纳率:0%
帮助的人:346万
展开全部
首先你的K没有初始化,在判断i&&K的时候万一K=0了I循环一次就错了
其次你在for(j=0,k=0;j<10;j++)将k变为了0,那么第一次循环后不是星期一的话你的k就保留为0了,在i的第二次循环时由于K=0导致循环结束。你是不是在运行的时候输入星期二以后的就会出错呢,而且一直提示你的English so poor。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxpointer
2011-10-29 · TA获得超过4102个赞
知道大有可为答主
回答量:1868
采纳率:33%
帮助的人:1209万
展开全部
k的初值不确定,在进入循环前没有给值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式