C语言专题 ③输入''#''结尾的字符串

一、思路:

想控制其以"#"结尾,可以用for或者while循环控制,但while循环相对于初学者来说可能更简单,因为大多数初学者的对于for循环的顺序理解不是特别到位。此处笔者想以自己的经历过程记录这种输入需要注意的地方。

因为这只是一个大程序的小部分,后面需要用到这个数组,所以以下示例均用数组作演示。

以下罗列可以采用的不同的方法(都是很小的点):
输入:
scanf("%c",&c[i])
c[i]=getchar();

循环:
while...
do...while

(都有很多种方式很多种组合的,怎么用全看自己的习惯叭)

实例:
1.while循环第一种:
#include<stdio.h>
#include<string.h>
int main(){
	int i=0;
	int m;
	char c[100];
	do{
		scanf("%c",&c[i]);
		i++;
	}while(c[i-1]!='#'&&c[i-1]!=EOF);
	m=strlen(c); //找到输入的数组长度,此处也可直接写 m=i;
	for(i=0;i<m-1;i++)
	{
		printf("%c",c[i]);
	}
	return 0;
}

用这种方法我一直错的原因是while()那里一直写的c[i]而非c[i-1]。输入一串带#的字符串后,在执行读入#之后i多加了一个1,所指的就会一直是空,所以此程序就一直不能结束。而且在这个程序中读入的字符串中会包含#,进行下一步操作的时候记住把"#"过滤掉。

第二种:

#include<stdio.h>
#include<string.h>
int main()
{
	int i=0;
	int m;
	char c[10]={0};
	char ch;
	while((ch=getchar())!='#' && ch!=EOF)
	{
		c[i++]=ch;
	}
	m=strlen(c);
	for(i=0;i<m;i++)
	{
		printf("%c",c[i]);
	}
	return 0;
}

而此处是一个个读入一个不为#的字符,读出来的数组中不包含#,也不用考虑检验的时候i的值是否需要减一。

2.for循环

先说一说for循环的格式及循环方式。

for(初始化条件;循环控制条件;增值表达式)
{
	...
	循环体;
}

在每次循环体被执行前(包括第一次),都要对循环控制条件测试一次。
每次循环体执行完以后,都有执行一次增值表达式。

所以此处正确的程序应该为:

#include<stdio.h>
#include<string.h>
int main()
{
	 int i=0;
	 int m;
	 char c[10]={0};
	 for(i=0;c[i]!='#';i++)
	 {
	 	 c[i]=getchar();
	 	 if(c[i]=='#')
		  break;
	 }
	 m=strlen(c);
	 for(i=0;i<m;i++)
	 {
	 	 printf("%c",c[i]);
	 }
	 return 0;
	}

此处采用if条件判断语句来跳出循环,因为既要兼顾第一次的测试,也要兼顾最后一次的测试,最好用if控制。
注意,这种方法储存的字符串也会带上#。

总结:在检验#是否输入的时候一定要注意下标i所指的元素是否为对应应该输入的#元素!!并且要理解记住for与while循环的控制流程!
  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值