求C语言编程高手指教。。我的程序错在哪里???运行的时候出现问题啊

/*编写一个函数,返回给定的字符在某个字符串中第一次出现的位置,如果不存在,则函数返回值为-1,并编写主程序调用该函数,要求能

对用户输入的任意多个字符进行查找,*/
#include <stdio.h>
#include <stdlib.h>
void zhaoweizhi(char*p,int n,char s); //找位置函数声明
void main()
{
int n,i;

char *p=NULL,m;
printf("请输入字符串中字符的个数:");
scanf("%d",&n);
p=(char*)malloc(n*sizeof(int)); /*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入这个字符串:"); /*输入元素的初始值*/
for(i=0;i<n;i++)
scanf("%c",p+i);
printf("你输入的字符串为:");
for(i=0;i<n;i++)
printf("%c",p[i]);
printf("请输入你要查找的字符:");
scanf("%c",&m);
zhaoweizhi(p,n,m); //运用找位置函数

}
void zhaoweizhi(char*p,int n,char s)
{
int j,sigma=0;
for(j=0;j<n;j++)
{
if(s==p[j])
printf("你输入的这个字符在字符串中为第%d个",j+1);
}
for(j=0;j<n;j++)
{
if(s!=p[j])
sigma+=1;
}
if(sigma==n)
printf("-1");
}

程序已经帮你改好
#include <stdio.h>
#include <stdlib.h>
void zhaoweizhi(char*p,int n,char s); //找位置函数声明
void main()
{
int n,i=0;

char *p=NULL,m;
printf("请输入字符串中字符的个数:");
scanf("%d",&n);
//p=(char*)malloc(n*sizeof(int)); /*向内存申请数组的内存空间*/
p=(char*)malloc((n+1)*sizeof(char)); /*你应该申请 char 字节的内存,否则使用 int 会浪费内存空间,申请 n+1 会给系统自动添加的 \0 也同时申请,否则字符串结束位置可能会出错 */

if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入这个字符串:"); /*输入元素的初始值*/
/*
for(i=0;i<n;i++)
scanf("%c",p+i);
*/
scanf("%s",p);

printf("你输入的字符串为:");
printf("%s\n",p);

/*
for(i=0;i<n;i++)
printf("%c",p[i]);
*/
getchar(); /*使用 scanf 输入字符 会把 回车符号也加进去,导致你无法输入 正确却的字符 使用 getchar() 接受回车 */
printf("请输入你要查找的字符:");
scanf("%c",&m);

zhaoweizhi(p,n,m); //运用找位置函数

delete p; //动态申请的内存需要 最后 释放

}
void zhaoweizhi(char*p,int n,char s)
{
int j,sigma=0;
int flag = 0; //使用标志判断即可
for(j=0;j<n;j++)
{
if(s==p[j])
{
printf("你输入的这个字符在字符串中为第%d个\n",j+1);
flag = 1;
break;
}
}
if(!flag)
{
printf("-1\n");
}
/* 冗余
for(j=0;j<n;j++)
{
if(s!=p[j])
sigma+=1;
}
if(sigma==n)
printf("-1");
*/
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-29
#include <stdio.h>
#include <stdlib.h>
void zhaoweizhi(char*p,int n,char s); //找位置函数声明
void main()
{
int n,i;

char *p=NULL,m;
printf("请输入字符串中字符的个数:");
scanf("%d",&n);
p=(char*)malloc(n*sizeof(char));
/*向内存申请数组的内存空间*/
if(p==NULL)
{
printf("没有足够的内存空间");
exit(0);
}
printf("请输入这个字符串:"); /*输入元素的初始值*/
for(i=0;i<n;i++)
{
fflush(stdin); //输不进去?要清空scanf的缓存
scanf("%c",p+i);

printf("%x\n",p+i);
}
printf("请输入你要查找的字符:");
fflush(stdin);
scanf("%c",&m);
zhaoweizhi(p,n,m); //运用找位置函数

}
void zhaoweizhi(char*p,int n,char s)
{
int j,sigma=0;
for(j=0;j<n;j++)
{
if(s==p[j])
printf("你输入的这个字符在字符串中为第%d个",j+1);
}
for(j=0;j<n;j++)
{
if(s!=p[j])
sigma+=1;
}
if(sigma==n)
printf("-1");
}
第2个回答  2011-12-29
申请空间时怎么用sizeof(int)

一段C语言代码不知道错哪儿了,请高手指教
编译错误,一般是语法有问题,程序在编译是就产生错误不能编译成目标文件,比如包名或内部类名写错误等等。运行错误,就是程序通过编译,却在运行时出错,一般是逻辑上的问题,比如数组越界,空指针等等。比较常见的运行时错误是在做除法运算时所产生的“除数为零”错误。如下列 VB 代码:Dim a As Doubl...

C语言,这个代码运行不出想要的东西求大神指教!
scanf(“%d“,&Num[i])是给数组输入整形数据 而$是字符 你这样写明显错了 建议用getchar

C语言程序找错!高手都进来看下!
错了,应该是:fseek(fp,offset,SEEK_SET);要区分大小写 void delet()里面也一样 fseek(fp,offset1,seek_set);要写成大写才对 上面这些改完之后就可以编译通过了……楼主编程基础还不扎实哦 C语言是区分大小写的 另外,文件读写记得要fscanf fprintf 不要和标准输入输出搞混了 ...

C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为什么会出现...
scanf的格式加'\\n',含义特殊,不是输入一个回车,而是输入完一个数字后,必须等待一个非空格、制表符、回车的输入,程序才会继续。所以你那样写,第一次循环输入2回车,不会进入下一次循环,而是等待再次输入,然后你输入3的时候2被存储在元素1中,进入下一个循环,已经有3了还要等待输入,于是你输入...

C语言求余代码,表示不知道错哪了,求指教。
,result);return 0;}上面是程序,求余数,只能是整数,不能是浮点数 也可以这样写,看程序,对照你的程序对比一下那不一样:include<stdio.h>int main(){int num1,num2,result;printf("请输入两个数:");scanf("%d%d",&num1,&num2);printf("余数是%d\\n",num1%num2);return 0;} ...

...电脑编译会出错,在别人的电脑就不出错,求高手指教
C语言中标识符有三类, 关键字、预定义标识符和用户定义标识符。其中 预定义标识符 C 语言系统提供的库函数名和编译预处理命令等构成了预定义标识符。在程序中若使用 了库文件包含,就把相应的预定义标识符定义在程序中了,程序设计时就可以使用这些预定 义标识符。有少数预定义标识符可以直接使用,而...

求C语言大神指教,为什么我这段代码运行以后执行1操作会崩溃
int n0;char name2[20];int year;int month;int day;}record;\/\/定义全局变量 数组定义的小了,所以超过2个以上的数据就不能存储了record red[M]={{"test",98,"test1",2008,8,8},{"张三",97,"李四",2009,10,20}};\/\/\/主函数在这里\/\/\/void main(){while(1){\/\/清屏system("CLS"...

C语言高手求指教,题目是不用POW函数求X的N次方,下面是我的程序,错哪...
c99标准规定:所有的变量定义或者函数声明必须放在其他的语句之前,所以int y;int s=1;都要放在第一个printf语句之前;另外,x=x*s要改为s=s*x;printf("The calculation is %d"\\n,x);应改为:printf("The calculation is %d"\\n,s);...

...的时候老是会有提示执行cl.exe错误啊!求高手指教
很明白的啊,你的程序ss.cpp第六行中变量x没有定义,所以错了。你改一下就可以了。

C语言的一道题 不知道哪里错了 请高手指教一下
puts()函数接受一个const char*类型的参数,如果成功就返回一个非负数,否则就返回EOF 并且,这两个函数都不做边界检查。自己写这两个函数时应该实现这几点,所以原程序修改如下:\/\/--- include <stdio.h> char *mygets(char *buf){ int i;char ch;if (feof(stdin)) return NULL;for (i =...

相似回答