❶ c语言程序,没有错误,但是运行不出来
指针开辟空间的方法有问题
变量用错,current没有赋值就用在循环里了。
scanf读入时的后面是加指针,字符串名本来就是指针,不需要&符号。
冒泡排序方法有问题。
正确的代码如下:
#include<stdio.h>
#include<stdlib.h>
#define N 100
int current;
typedef struct student
{
char *num;
char *nam;
float chinese;
float english;
float math;
double average;
float sum;
}STU;
STU stu[N]; //定义结构体数组
void bubbleSort(STU *arr, int n)
{
int i,j;
STU m;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j].sum < arr[j+1].sum)
{
m=arr[j];
arr[j]=arr[j+1];
arr[j+1]=m;
}
}
}
return;
}
int main(){
int i,t;
printf("请输入学生人数 : ");
scanf("%d",&t);
for(i=0; i<t; i++){
printf("请输入学生的学号: ");
stu[i].num = (char *)malloc(sizeof(char)*10);
scanf("%s",stu[i].num);
printf("请输入学生的姓名: ");
stu[i].nam = (char *)malloc(sizeof(char)*10);
scanf("%s",stu[i].nam);
printf("请输入学生的语文成绩: ");
scanf("%f",&stu[i].chinese);
printf("请输入学生的数学成绩: ");
scanf("%f",&stu[i].math);
printf("请输入学生的英语成绩: ");
scanf("%f",&stu[i].english);
//输出每个学生的平均成绩
stu[i].average=(stu[i].chinese + stu[i].math + stu[i].english)/3.0;
printf("学生%s的平均成绩为:%.2f ",stu[i].nam,stu[i].average);
//输出每个学生的总成绩
stu[i].sum=(stu[i].chinese + stu[i].math + stu[i].english);
printf("学生%s的总成绩为:%f ",stu[i].nam,stu[i].sum);
} //录入学生成绩
bubbleSort(stu, t);
printf("按总分由高到低输出学生的信息为: ");
for(i=0; i<t; i++){
printf("学生姓名:%s 学生学号:%s 语文:%f 英语:%f 数学:%f 总分:%.2lf 平均分:%f ",
stu[i].nam,stu[i].num,stu[i].chinese,stu[i].english,stu[i].math,stu[i].sum,stu[i].average);
}
for(i=0; i<t; i++){
free(stu[i].num);
free(stu[i].nam);
}
return 0;
}
❷ C语言指针程序无法运行
#include<stdio.h>
voidmain()
{
inta[3][4],i,j,*p;
p=a[0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",(p+i*4+j));
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%4d",(p+i)[j]);
printf(" ");
}
}
p+i [j] 本身就是一个值而不是指针,你对值加* 自然是不对的。
❸ C语言程序,运行不出来结果
如图中1处,没有输出的猪腰子问题在这里,p的初始值应为a.而不是0,因为之前已经定义了p=a这里可以改成for(;p<a+5;p++)。
另外第二处经过for循环,p已经指向数组的下一个地址,此时输出值不确定。这里没有语法错误。需要注意就是。
❹ C语言指针使用问题
答案没错的,是你理解错了,这里不是要把r替换为s。
重点看这段代码:
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
这里的意思是当p指向的字符和ch相等时,将str所指向的字符变为ch,然后再++对应这里也就是先变为r然后变为s,str++表示str指向下一个字符。这里的str一开始是指向program中的p字符,然后当p指针指向r字符时,str还是指向p字符,接着str将p字符改为r,然后又++改为s。接着p指针继续向下移动,一直到第二个r,然而此时的str是指向program中的第二个元素也就是r,然后重复和之前一样的步骤变为s。最后跳出循环后,*str='\0';表示截断。
哦,还有就是你第一个程序写错了,scanf函数要的是指针,不是scanf("%c",char_c);这样的。char_c是个变量名,应该scanf("%c",&char_c);
That'all
❺ 为什么c语言指针那么难
指针确实难于理解。指针具有两个身份:
第一,指针本身是一个变量。只要是是变量,它就占用内存地址。当然如果没有分配内存地址,不在其内。
第二,指针包含一定的一个内容。指针所特殊的就是,他的内容保存的是其他变量的地址。
以上两点可以通过书中的示例7-7有比较好的体现。
例如,定义指针变量intp1。 intp1=&a 就表示 intp1保存的信息为a的地址。
而*intp1表示是intp1所保存地址的内存单元所保存的值,实际就是a的值。
所以,你给出的 *intp1=&a; 是一种不太合适写法。我们可以这样假设,再给一个变量b。令*intp1=b=&a,则
b=&a,说明b保存的a的地址,这样b就是一个指针。那*intp1=b,则说明 intp1所保存的地址指向的内存单元为b。所以,intp1可以看成a的指针的指针。
上面这个例子比较绕,慢慢想想,就理解了。
❻ 一个c语言指针交换无法运行问题
你把整型数值赋给了指针变量了,所以发生错误。应在主函数里改成p1=&a,p2=&b。
❼ c语言指针问题,为什么我输入很多个都没有显示错误
因为C语言不提供内存越界访问检查机制,p在堆内存上申请了一个char长度空间(注意:malloc实际分配的内存有可能比请求的稍微多一点,但是这个行为是由编译器定义的,所以不能指望它肯定会分配比请求更多的内存)。
你在随后输入一个字符串时候,通过scanf函数读取到p指针指向的内存中,虽然只申请了一个字节空间,但其后的内存因为(通常)不是非法地址,所以也能被操作。
这个错误在实际软件开发时,经常会发生且不容易发现。假如操作的越界内存是一块非法地址,程序将会终止。这个错误在unix/linux系统上称为“段错误”。它提示程序试图访问一个并未分配给程序的内存位置。这还属于比较好的情形,最可怕的是:如果这个越界的地址是一个合法地址(如你的例子中),接下来,如果有其他变量正在使用这块内存,其中的值被无意修改了,并且这种错误很难发现。所以对指针的操作要异常小心。
另外你可以试试,即使定义这个p指针为
char
p[1];栈中内存,也能进行错误操作如:
12345678p[-1] = 'l'; //“错误操作”p[0] = 'o';p[1] = 'v'; //“错误操作”p[2] = 'e'; //“错误操作”char *temp = p; --temp; printf("%s\n", p); //打印 oveprintf("%s\n", temp); //将打印 love
❽ 在C语言中,利用指针,将一个字符数字复制到另一个字符数组。为何运行不出来
错误有二:
(1)除申明变量处,其余不能直接对字符串赋值,p="Another beautiful string";应改为
strcpy(p,"Another beautiful string");
(2)字符串q明显比p短,而定义的strcpy函数*from应该比*to短才可以,否则会出现错误,若改成
strcpy(q,p)就可以了,另外p,q本身就是指针(地址变量),因此实参传递时不能加*
❾ C语言中使用指针但是最后输入信息就变成无法运行,(代码如下)可能是指针问题或者编译器的问题
main中指针p没有初始化,把char *p改成
char *str[1000],*p=str;即代码改成如下:
#include<stdio.h>
#include<string.h>
int isPalindrome(char *str)
{
int i,j;
for(i=0,j=strlen(str)-1;i<=j;i++,j--)
{
if(*(str+i)!=*(str+j)) return 0;
}
return 1;
}
int main()
{
char str[1000],*p=str;
gets(p);
if(isPalindrome(p)) printf("是");
else printf("否");
return 0;
}
❿ C语言指针问题,为什么不能运行呢。
不知道你在程序中的意图,猜测是字符指针传递地址传递到函数并实现在函数体内改变原字符指针的指向,根据这一点,程序只需要改一点:
int fun(char *a,char b,char *pa){
==>
int fun(char *a,char b,char **pa){
因为你在main()中定义的char *p是没有存储空间的,*pa=a+1会导致严重错误,以下代码实现你的设想,在Turbo C 2.0调试通过,希望对你有帮助:
#include <stdio.h>
#include <alloc.h>
int fun(char *a,char b,char **pa){
int i;
for(i=0;a[i];i++){
if(a[i]==b){
*pa=a+i;
return 0;
}
}
*pa=0;
return 0;
}
void main(){
char a[]="abcdefg",b='h';
char *p;
fun(a,b,&p);
printf("%c\n",*p);
}