[程序质疑]关于“continue关键字”的用法,这个程序能实现这样的功能吗?

msdner 2003-10-16 05:22:41

程序功能:从键盘入接收一行输入,然后删除其中小写的元音字符,并显示余下的内容。

#include <stdio.h>

int main( void )
{


char buffer[81];
int ctr;



puts("Enter a line of text:");
gets(buffer);



for (ctr = 0; buffer[ctr] !='\0'; ctr++)
{

if (buffer[ctr] == 'a' || buffer[ctr] == 'e'
|| buffer[ctr] == 'i' || buffer[ctr] == 'o'
|| buffer[ctr] == 'u')
continue;



putchar(buffer[ctr]);
}
return 0;
}

测试语句:i am Chinese 输出为 m chns

问题:
一、gets(buffer);这条语句的含义?
二、FOR循环中这条语句buffer[ctr] !='\0'是判断语句的结尾,还是判断句子中是否有空格?
三、putchar(buffer[ctr]); 这条语句的用途?
...全文
108 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
msdner 2003-10-18
  • 打赏
  • 举报
回复
谢谢大家。
Bandry 2003-10-17
  • 打赏
  • 举报
回复
buffer[ctr] !='\0'判断字符串是否结束,不要说语句,容易让别人误解
for语句的循环变量初始语句在整个循环中只会执行一次!
看来楼主是初学C啊
wulelu 2003-10-17
  • 打赏
  • 举报
回复
程序没有什么大的问题
只是在gets()函数的使用上,要小心一点
gets()不会限制输入的字符的多少
多于80个字符的输入都有可能让程序崩溃掉
同意lbaby说法,应该更严谨一点是吗?
msdner 2003-10-17
  • 打赏
  • 举报
回复
好的,谢谢大家,晚上回来结帖。
LinuxPanther 2003-10-16
  • 打赏
  • 举报
回复
for (ctr = 0; buffer[ctr] !='\0'; ctr++)
{

if (buffer[ctr] == 'a' || buffer[ctr] == 'e'
|| buffer[ctr] == 'i' || buffer[ctr] == 'o'
|| buffer[ctr] == 'u')
continue;
//:如果buffer[ctr]中的字符是a,e,i,o,u,or A,E,I,O,U的话,就执行
//continue 语 句
//就是要跳出本次循环,那么putchar(buffer[ctr]语句就没有执行
//从而没有输出a......E这些字符,
//然后ctr++使得开始验证下一个字符!

putchar(buffer[ctr]);
}
laomai 2003-10-16
  • 打赏
  • 举报
回复
哈哈 .continue不是重新执行所有循环,而是执行下一次循环体。
相当于label:
ctrl=0;
label:
if(buf[ctrl]=='a')
goto label;
else
{
putchar(buffer[ctr]);
i++;
}
而你的理解可能是
ctrl=0;
label:
ctrl=0; //事实上这条初始化语句只被执行了一次!而你以为执行了多次,因此你把它误作为循环体的起点了
if(buf[ctrl]=='a')
goto label;
else
{
putchar(buffer[ctr]);
i++;
}
而你的理解可能是
ctrl=0;



msdner 2003-10-16
  • 打赏
  • 举报
回复
谢谢大家,我越弄越糊涂了。

是这个FOR循环,我看不懂-_-,晕了。

先让ctr=0,然后判断buffer[ctr]到了句末没有,如果没有到,就执行语句体,对吧?这个语句体先判断是不是元音小字符,如果是就回到循环开头,如果不是就继续循环体以下的语句putchar(buffer[ctr]);了,我的意思是,它怎么会打印出一个剩下的字符串,而不是一个字符,难道这个函数有记住原来这个字符串的字符位置的功能吗?不会覆盖掉吗?
msdner 2003-10-16
  • 打赏
  • 举报
回复
谢谢大家,我越弄越糊涂了。

是这个FOR循环,我看不懂-_-,晕了。

先让ctr=0,然后判断buffer[ctr]到了句末没有,如果没有到,就执行语句体,对吧?这个语句体先判断是不是元音小字符,如果是就回到循环开头,如果不是就继续循环体以下的语句putchar(buffer[ctr]);了,我的意思是,它怎么会打印出一个剩下的字符串,而不是一个字符,难道这个函数有记住原来这个字符串的字符位置的功能吗?不会覆盖掉吗?
lbaby 2003-10-16
  • 打赏
  • 举报
回复
程序没有什么大的问题
只是在gets()函数的使用上,要小心一点
gets()不会限制输入的字符的多少
多于80个字符的输入都有可能让程序崩溃掉

至于continue

如果continue 起作用的话,将结束本次循环,不再执行continue以后的任何语句
而是进入下一轮循环

playboyxp 2003-10-16
  • 打赏
  • 举报
回复
你的那个程序实现不了
#include <stdio.h>

int main( void )
{


char buffer[81];
int ctr;



puts("Enter a line of text:");
gets(buffer);



for (ctr = 0; buffer[ctr] !='\0'; ctr++)
{

if (buffer[ctr] == 'a' || buffer[ctr] == 'e'
|| buffer[ctr] == 'i' || buffer[ctr] == 'o'
|| buffer[ctr] == 'u'||buffer[ctr] == 'A'||buffer[ctr] == 'E'||buffer[ctr] == 'I'||buffer[ctr] == 'O'||buffer[ctr] == 'U')//扩充一下
continue;



putchar(buffer[ctr]);
}
return 0;
}
一、gets(buffer);这条语句的含义从键盘输入一个字符串
二、FOR循环中这条语句buffer[ctr] !='\0'是判断语句的结尾,不是空格
三、putchar(buffer[ctr]); 输出字符串
zfxxx 2003-10-16
  • 打赏
  • 举报
回复
空格为“20H”
msdner 2003-10-16
  • 打赏
  • 举报
回复
谢谢大家,

一、那判断空格怎么判断呢?
二、如果测试语句为i am Chinese 为什么会输出 m chns 而不是i am Chinese,我觉得这个FOR语句没对这个字符串作什么特别的处理,奇怪了。
blue_coco 2003-10-16
  • 打赏
  • 举报
回复
1。从键盘接受一串字符,回车结束。
2。判断串字符结尾。
3。printf("%c", buffer[ctr]);
daizh 2003-10-16
  • 打赏
  • 举报
回复
一、gets(buffer);是从stdin获得一行数据。
二、buffer[ctr] !='\0'是判断语句的结尾
三、putchar(buffer[ctr]);向stdout输出一个字符。

69,336

社区成员

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

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