一、思路:
想控制其以"#"结尾,可以用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控制。
注意,这种方法储存的字符串也会带上#。