題目:輸入一個字符串和一個字符,在字符串 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很容易接受換行符。
