求解释?哪位能看下这个程序?错在哪?该如何处理

求解释??哪位能看下这个程序?错在哪?
描述:给你一个字母不重复的字符串,再给你一个字母,请你编写程序输出该字母在字符串中第一次出现时候的位置,如果不在该字符串中,则输出-1 

输入:

一个长度不大于20的字符串,和一个字母,它们中间用一个空格格开

输出:

输出要查找的字母在字符串中第一次出现时候的位置,最后输出一个回车



[code=C/C++][/code]#include <stdio.h>
#include <string.h>

void scan(char*str,char*ch);
void print(char*str,char ch);

int main()
{
  char str[20];
  char ch;
  scan(str,&ch);
  print(str,ch);
  return 0;
}

void scan(char*str,char*ch)
{
  scanf("%s",str);
  scanf("%c",ch);
}

void print(char*str,char ch)
{
  int i=0;
  while(str[i]!=ch)
  {
  i++;
  }
  i==strlen(str)?printf("0\n"):printf("%d\n",i);
}


------解决方案--------------------
while(str[i]!=ch)
while(str[i]!=ch&& strr[i]!='\0')
原来的找不到会出现内存越界
------解决方案--------------------
while(str[i]!=ch)
{
i++;
}
这句如果str没有ch就是死循环,况且输出的应该是-1而不是0。其次当str[i]==ch时ch出现的实际位置应该i+1,因为str[0]是第一个元素啊
------解决方案--------------------
#include <string.h>
#include<stdio.h>
void scan(char*str,char*ch);
void print(char*str,char ch);

int main()
{
char str[20];
char ch;
scan(str,&ch);
print(str,ch);
return 0;
}

void scan(char*str,char*ch) //函数前面要加返回类型
{
scanf("%s\n",str); //加上换行,否则即使输入空格或回车也会被当成字符的
scanf("%c",ch);
}

void print(char*str,char ch) ////函数前面要加返回类型
{
int i=0;
while(str[i]!=ch)
{
 
i++;
if(i>int(strlen(str))) //这里设置一个出口
break;
}
i>int(strlen(str))?printf("-1\n"):printf("%d\n",i); //strlen返回值是无符号型,这里强制转换下
  
}
帮你改了下! 看看吧!