题目:输入一个字符串和一个字符,在字符串 s 中查找字符 ch,如果找到返回第一次找到的该字符的字符串中的位置(地址);
示例1:
int main(void)
{
char ch, str[80];
printf("Input the string:\n");
scanf("%s", str);
ch = getchar( );
...
return 0;
}
按照示例编写并运行程序后,发现输入字符串后,直接跳过了后一语句 ch = getchar( ); 即无法输入要查找的字符,为什么?
原因:
首先scanf函数接收键盘输入的字符串,然后按换行符(或其他分隔符),此时有两个操作:1)scanf( )函数遇到回车符(即换行符)或空格符字符串输入结束;2)换行符也是一个字符,
其被后一句 ch = getchar( ) 接收,即此时ch的值是一个换行符'\n'; 所以对程序稍作修改,再添加一条语句 getchar( ); 即可。
...
printf("Input the string:\n");
scanf("%s", str);
getchar( ); // 跳过之间的分隔符;
ch = getchar( );
...
。
示例2
// 验证函数Precede
char c1, c2;
while (c1 != '$') {
scanf("%c%c", &c1, &c2);
getchar(); // 这句很重要;
printf("c1 = %c, c2 = %c\n", c1, c2);
printf("precede = %c\n", Precede(c1, c2));
}
说明:在输入要作为实参的字符 c1、c2时,scanf() 后一定要加一句getchar( ),其用来接受输入完毕后的换行符; 不然c1很容易接受换行符。