免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1974 | 回复: 11
打印 上一主题 下一主题

简单的问题,新手求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-13 08:26 |只看该作者 |倒序浏览
一个程序怎么也通不过,请分析一下什么原因
需要输入三个字符串;然后按照从小到大得顺序输出

#include <stdio.h>
#include <string.h>

int main(void){
        char *i,*p,*q,*tmp;
        printf("Please input three numbers:");
        scanf("%s %s %s",i,p,q);
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
        if(strcmp(p,q)>0){
                tmp=p;
                p=q;
                q=tmp;}
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
        printf("The result is: %s < %s < %s \n",i,p,q);
}


编译能通过,但是运行总是报segmentation fault

论坛徽章:
0
2 [报告]
发表于 2006-05-13 09:05 |只看该作者
LZ还真是初学者啊,记住了,以后在使用指针之前,一定要赋初值。如这里的char *i,在使用i之前,先得为它分配空间,不然,输入的字符串放到哪里去呢?

论坛徽章:
0
3 [报告]
发表于 2006-05-13 09:47 |只看该作者
我也是新手……把程序稍微修改一下:
#include <stdio.h>
#include <string.h>

int main(void){
        int *i,*p,*q,*tmp;
        printf("Please input three numbers:");
        scanf("%d %d %d",&i,&p,&q);
printf("%d %d %d\n",i,p,q);
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
printf("%d %d %d\n",i,p,q);
        if(strcmp(p,q)>0){
                tmp=p;
                p=q;
                q=tmp;}
printf("%d %d %d\n",i,p,q);
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
        printf("The result is: %d < %d < %d \n",i,p,q);
}

运行结果:
-------------------------------------
Please input three numbers:1 50 30
1 50 30
1 50 30
1 30 50
The result is: 1 < 30 < 50
-------------------------------------
Please input three numbers:80 40 900
80 40 900
10 80 900
40 900 80
The result is: 40 < 900 < 80
-------------------------------------
对<<tmp=i;i=p;p=tmp;>>这部分什么时候加*什么时候加&很不明白
还有这个执行结果也不明白。。。学习ing…………

论坛徽章:
0
4 [报告]
发表于 2006-05-13 11:04 |只看该作者
原帖由 77902543 于 2006-5-13 09:47 发表
我也是新手……把程序稍微修改一下:
#include <stdio.h>
#include <string.h>

int main(void){
        int *i,*p,*q,*tmp;
        printf("Please input three numbers:");
    ...


My God! 我刚才不是在楼上说了吗? 指针使用前得初始化!!!你这儿的三个整形指针i,p,q初始化了吗? 没有!再说,对于整形你这儿也不需要指针类型。还有,函数strcmp是对字符串类型进行比较的,你用它来比较指针变量(按你的想法应该是整形变量)干吗?回去好好看书吧,把基础学好了!

帮你改一下代码中的错误吧

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void){
  4.         int i,p,q,tmp;
  5.         printf("Please input three numbers:");
  6.         scanf("%d%d%d",&i,&p,&q);   //scanf函数要求传变量的地址,所以用&取变量的地址
  7.         printf("%d %d %d\n",i,p,q);
  8.         if(i>p){
  9.                 tmp=i;
  10.                 i=p;
  11.                 p=tmp;
  12.         }
  13.         printf("%d %d %d\n",i,p,q);
  14.         if(p>q){
  15.                 tmp=p;
  16.                 p=q;
  17.                 q=tmp;
  18.         }
  19.         printf("%d %d %d\n",i,p,q);
  20.         if(i>p){
  21.                 tmp=i;
  22.                 i=p;
  23.                 p=tmp;
  24.         }
  25.         printf("The result is: %d < %d < %d \n",i,p,q);
  26. }
复制代码

[ 本帖最后由 tyc611 于 2006-5-13 11:05 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-05-13 13:36 |只看该作者
哦,原来指针都要这样初始化一下,不然不可以使用,我也学到了一点,谢谢.我也是新手

论坛徽章:
0
6 [报告]
发表于 2006-05-13 14:52 |只看该作者
字符指针怎么初始化?

我把程序修改了一下,还是不行呀。

#include <stdio.h>
#include <string.h>

int main(void){
        char *i="a";
        char *p="b";
        char *q="c";
        char *tmp="d";
        printf("Please input three numbers:");
        scanf("%s %s %s",i,p,q);
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
        if(strcmp(p,q)>0){
                tmp=p;
                p=q;
                q=tmp;}
        if(strcmp(i,p)>0){
                tmp=i;
                i=p;
                p=tmp;}
        printf("The result is: %s < %s < %s \n",i,p,q);
}

论坛徽章:
0
7 [报告]
发表于 2006-05-13 15:15 |只看该作者
看的真热闹,lz补基础取吧

论坛徽章:
0
8 [报告]
发表于 2006-05-13 15:16 |只看该作者
原帖由 fjingxu 于 2006-5-13 14:52 发表
字符指针怎么初始化?

我把程序修改了一下,还是不行呀。

#include <stdio.h>
#include <string.h>

int main(void){
        char *i="a";
        char *p="b";
...


敢问LS什么叫指针变量?不外乎其值为一块内存空间首址的变量(即通常所说的指针指向某个空间),也就是说,初始化指针应当用一个空间的地址去初始化。
比如,这儿 i 指针变量指向的空间要存放字符串,我们得先为它分配一块空间(或用已有的空间)去初始化它(如: i=malloc(sizeof(char)*100);为它分配一百个字符空间)。然后才能使用该指针指向的空间去存放输入的字符串。


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main(void){
  5.         char *i=malloc(sizeof(char)*100);
  6.         char *p=malloc(sizeof(char)*100);
  7.         char *q=malloc(sizeof(char)*100);
  8.         char *tmp;

  9.         printf("Please input three numbers:");
  10.         scanf("%s%s%s",i,p,q);

  11.         if(strcmp(i,p)>0){
  12.                 tmp=i;
  13.                 i=p;
  14.                 p=tmp;
  15.         }
  16.         if(strcmp(p,q)>0){
  17.                 tmp=p;
  18.                 p=q;
  19.                 q=tmp;
  20.        }
  21.         if(strcmp(i,p)>0){
  22.                 tmp=i;
  23.                 i=p;
  24.                 p=tmp;
  25.        }
  26.         printf("The result is: %s < %s < %s \n",i,p,q);
  27. }
复制代码

论坛徽章:
0
9 [报告]
发表于 2006-05-13 15:23 |只看该作者
那我用指针干什么还不如用数组,
我就是想实现对输入得长度不敏感。

另:看到另一篇文章:
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1

可能和我遇到得情况类似

论坛徽章:
0
10 [报告]
发表于 2006-05-13 15:42 |只看该作者
报告,
gcc时加入参数fwritable-strings 就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP