鱼C论坛

 找回密码
 立即注册
查看: 3414|回复: 8

我的这个程序应该怎么改呢?

[复制链接]
发表于 2012-3-19 20:37:36 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 lyq19900123 于 2012-3-21 10:16 编辑

这个程序就是输入10个数,然后反向输出;提示下面两处的printf函数有错误,求助高手啊
!错误提示 error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
虽然问题还没解决,还是非常感谢下面的同学,还是期待高手指点!
#include <stdio.h>


void main()
{
   void swap(int *x,int y);
   int arr[10];
   int *p;
   int i;
   p=&arr[0];
   printf("please input ten number:");
   for(i=0;i<10;i++)
        scanf("%d",p+i);
   for(i=0;i<10;i++)
        sprintf("%d",*p++);//这里如果改成sprintf("%d",arr);程序是能正常编译的,我想知道的是,这里有什么错误?//
p=arr;。吧这里改成printf函数就好了
   swap(p,10);
   p=arr;
   for(i=0;i<10;i++)
        sprintf("%d",*p++);//这里有同样的问题,错误提示error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'//

}
void swap(int *x,int y)
{
   int *i,*j,*k,m;
   i=x;
   j=x+y-1;
   k=x+(y-1)/2;
for(;i<=k;i++,j--)
{
  m=*i;
  *i=*j;
  *j=m;
}
return;

}



最佳答案

查看完整内容

哥们,基础还要花点功夫 好好去看看书,弄清楚数组和指针的区别,推荐你去看 C Primer Plus 下面是改好的代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-19 20:37:37 | 显示全部楼层

哥们,基础还要花点功夫
好好去看看书,弄清楚数组和指针的区别,推荐你去看 C Primer Plus
下面是改好的代码
  1. #include <stdio.h>

  2. #define LEN 4
  3. void main()
  4. {
  5.     void swap(int *x,int y);
  6.     int arr[LEN];
  7.     int *p;
  8.     int i;
  9.     // arr是一个地址 arr 和 &arr[0] 是等效
  10.     // 基本上很少会有人会像你这样子写
  11.     // 一半都是 p = arr;
  12.     p=&arr[0];        

  13.     printf("please input ten number:");
  14.     for(i=0;i<LEN;i++)
  15.       scanf("%d",p+i);
  16.     /**
  17.     *    *p++ 已经不是指针了
  18.     for(i=0;i<LEN;i++)
  19.       sprintf("%d",*p++);
  20.       */
  21.     swap(p,LEN);
  22.     //p=arr;
  23.     for(i=0;i<LEN;i++)
  24.       // 你好好去查询sprintf函数的API
  25.       printf("%d",*p++);
  26.    

  27.     return;

  28. }
  29. // 这个函数,用的太纠结了
  30. // 效率太低了
  31. void swap(int *x,int y)
  32. {
  33.     int *i,*j,*k,m;
  34.     i=x;
  35.     j=x+y-1;
  36.     k=x+(y-1)/2;
  37.     for(;i<=k;i++,j--)
  38.     {
  39.         m=*i;
  40.         *i=*j;
  41.         *j=m;
  42.     }
  43. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-19 21:00:05 | 显示全部楼层
p=&arr[0];
这句是错误的,应该写成P=arr; 数组名就是一个指针。指针一般是内存里的字节地址,如果你把一个INT数据地址给指针会出现错误的。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-19 21:15:18 | 显示全部楼层
幕府幽魂 发表于 2012-3-19 21:00
p=&arr[0];
这句是错误的,应该写成P=arr; 数组名就是一个指针。指针一般是内存里的字节地址,如果你把一个 ...

原先我是这么写的p=arr;同样的错误我才改的,还是谢谢你的提醒,arr【0】的地址和arr不一样吗?我的指针也是int型的指针,这里求解释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-19 22:19:09 | 显示全部楼层
lyq19900123 发表于 2012-3-19 21:15
原先我是这么写的p=arr;同样的错误我才改的,还是谢谢你的提醒,arr【0】的地址和arr不一样吗?我的指针也 ...

arr[0] 已经不是一个地址了
arr 才是地址,要&arr[0]才是地址,楼主这段代码逻辑比较混乱,而且不规范
我贴出我写的 楼主借鉴下,然后楼主需要注意的地方
也在注释里面说明了

  1. #include <stdio.h>

  2. #define LEN 5

  3. /* 对函数的声明最好放在这个位置*/
  4. void swap(int *arr,int len);

  5. void main()
  6. {

  7.     int arr[LEN];

  8.     printf("please input ten number:\n");

  9.     for(int i=0;i< LEN;i++)
  10.       scanf("%d",arr+i);        // 注意区分,地址和地址指向的内存 attr 和 &attr[0] 才是地址,attr[0]是这个地址指向的内存,而且拥有4Byte的长度

  11.     swap(arr,LEN);
  12.    
  13.     for(int i = 0; i < LEN; i++)
  14.     {
  15.         printf("%d ", arr[i]);
  16.     }
  17.     printf("\n");
  18.     return;

  19. }

  20. /*
  21. * 接受一个整形数组,和数组的长度
  22. */
  23. void swap(int *arr, int len)
  24. {
  25.     int i,temp, count;
  26.     // 如果我要把 1 - 10 的数字对换
  27.     // 只需要循环5次,1 和 10 换 ,2 和 9 换 ,以此类推
  28.     count = len / 2;
  29.     for( i =0; i< count; i++)
  30.     {
  31.         // 将索引为i的数和索引为len-i-1的数调换
  32.         temp = arr[i];
  33.         arr[i] = arr[len - 1 - i];
  34.         arr[ len - 1 -i ] = temp;
  35.     }
  36. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-19 22:29:53 | 显示全部楼层
wAterLoo 发表于 2012-3-19 22:19
arr[0] 已经不是一个地址了
arr 才是地址,要&arr[0]才是地址,楼主这段代码逻辑比较混乱,而且不规范
...

我是初学者,非常感谢你的解析,用数组写的我能看明白,但是我想尝试用指针写,但是每次写程序都是相同的错误,希望你能帮我分析下上面的代码哪里有问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-19 23:19:03 | 显示全部楼层
#include <stdio.h>

void main()
{
void swap(int *x,int y);
int arr[10];
int *p;
int i;
p=&arr[0];
printf("please input ten number:");
for(i=0;i<10;i++)
  scanf("%d",p+i);
for(i=0;i<10;i++)
  printf("%d",*p++);
printf("\n");
swap(p,10);
p=arr; 把这句话写在上面一句的前面就ok了;你前面输入数据的时候改变了指针P的值,记得复原应该在调用函数的前面。。。。。程序应该没有什么错、、、、、加油吧!!
  printf("%d",*p++);
}
void swap(int *x,int y)
{
int *i,*j,*k,m;
i=x;
j=x+y-1;
k=x+(y-1)/2;
for(;i<=k;i++,j--)
{
  m=*i;
  *i=*j;
  *j=m;
}
return;

}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-20 01:53:03 | 显示全部楼层
#include <stdio.h>

void main()
{
        void swap(int *x,int y);
        int arr[10]; //定义10个元素的整型数组
        int *p;
        int i;
        p=&arr[0];  //指针p指向数组的首地址,一般用p=a,简洁,但效果其实都是一样的
        printf("please input ten number:");
        for(i=0;i<10;i++)
                scanf("%d",p+i);
        for(i=0;i<10;i++)
                printf("%d  ",*p++); //printf("%d  ",*(p+i));
        /**
        *如果用你原来的程序,只需要将        p=arr;语句放到swap(p,10);之前即可,因为你打印后,p已经不指向数组的首地址了
        *看的出,你很有思想,很爱探索,不按常规哦...
        **/
        p=arr;

        swap(p,10);
        printf("\n");
       
        for(i=0;i<10;i++)
                printf("%d  ",*p++);

}


void swap(int *p,int n)
{
        //这里简写吧
      int *i,*j,m; //定义两个指针,两头跑
        for(i=p,j=p+n-1;i<j;i++,j--)
        {
                m=*i;
                *i=*j;
                *j=m;
        }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-21 14:48:03 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-3-21 14:49 编辑


        
   

      sprintf(格式化字符串复制)
      
相关函数
   
printf,sprintf
      
      
表头文件
   
#include<stdio.h>
      
      
定义函数
   
int sprintf( char *str,const char * format,.........);
      
      
函数说明
   
sprintf()会根据参数format字符串来转换并格式化数据,然后将结果复制到参数str所指的字符串数组,直到出现字符串结束(’\0’)为止。关于参数format字符串的格式请参考printf()。
      
      
返回值
   
成功则返回参数str字符串长度,失败则返回-1,错误原因存于errno中。
      
      
附加说明
   
使用此函数得留意堆栈溢出,或改用snprintf()。
      
      
范例
   
#include<stdio.h>
      main()
      {
      char * a=”This is string A!”;
      char buf[80];
      sprintf(buf,”>>> %s<<<\n”,a);
      printf(“%s”.buf);
      }

这个函数的用法和printf 函数的用法都不同,肯定不行

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-12 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表