网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月10日漏签0天
c语言吧 关注:798,972贴子:4,358,576
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 53回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

新手但不会伸手,关于程序的一个小错误

  • 只看楼主
  • 收藏

  • 回复
  • F2Kwho
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
提前声明,我估计我的程序里有很多错误,但我只问其中一个,试过很多次都无法解决。如果吧主认为我是伸手党,删了就好。第一次发,不太懂规则。
/* C Wondrous function
by: Martin
date: 25/03/2014
if the current term is even
the next term is half the current term
if the current term is odd
the next term is three times the current term, plus 1
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int printWondrous (int start);
int main (int argc, char * argv[]) {
int x;
assert (x > 0);
printf("Enter a integer greater than 0/n");
scanf("%d", &x);
x = printWondrous (x);
if (x == 1) {
printf("%d\n", x);
return EXIT_SUCCESS;
} else if (x % 2 == 0) {
printf("%d ", x);
} else {
printf("%d ", x);
}
return EXIT_SUCCESS;
}
int printWondrous (int start) {
int x;
if (x % 2 == 0) {
int x = start % 2;
} else {
int x=3 * start + 1;
}
return x;
}
当我敲进编译器以后,它告诉我int printWondrous 里的两个x没有用到,完全不明白什么意思,试了各种方法也不会改。
我记得貌似要说什么努力过程,我就直接把一些想说的直接说了
1.我现在大一直接学C,所以对很多东西还不是很理解,但是课程进度快,每周又有必交的作业,所以有时候自己都不知道写些什么
2.这些都是我自己写的,有些格式是看教授例子
3.一开始有更多的错误,比如没加大括号,没定义什么的,我都一一修改了,但是这个真的不知道怎么改。。。
4.不要随便说我是什么伸手党,其实还有更重要还没学过的一部分要加进这个程序里,等我解决这个问题就去继续完成。
5.你们也应该能发现我这个程序是全英文,我在留学,我对function真的不是很懂,教授导师讲的都很难听懂,只能自己看例子琢磨。
6.最后强调,我只想知道为什么int print没有用到x


  • 幸运之王
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


2025-08-10 15:51:24
广告
不感兴趣
开通SVIP免广告
  • 315222904
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
printWondrous 函数中的int型变量x没有初始化值就进行了运算,结果是未定义的


  • 幸运之王
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
int printWondrous (int start) {
int x;
if (x % 2 == 0) {
int x = start % 2;
} else {
int x=3 * start + 1;
}
return x;
}
这里面为什么有两个int x呢?


  • 幸运之王
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

稍微改了一下,在注释里,另外不是太明白你程序的意图,不知道是用来做什么 感觉 是在练习function编程,但是似乎思想有点乱,逻辑不是很顺。


  • 315222904
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看到你的魔方头像决定多说几句。。这个程序的大致意思是不是设置这样一个循环,然后判断x的值,若x是奇数,则令x=3*x+1;若x是偶数,x=x/2。最后x的值会变为1。这是我根据你的注释推测出的,但是你的代码完全和题目无关。不知道你的C语言学习到什么程度了,最好把你对于这个程序的思路和困惑说一下,而不是只谈编译/运行时的错误。以上,勿喷


  • 幸运之王
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
接上:
建议楼主考虑单步跟踪调试的方法来追踪一下程序
例外竟然有了assert(x > 0) 那么事先把x定义成大于0吧,不然不太稳定。


  • 龙城v诛仙
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.#include <assert.h>这个最好不要用,详情可以自己百度。
2.assert(x>0);必须给x赋值才能跟0比较大小,因此应该把它放在scanf语句后
3.int printWondrous (int start) {
int x;
if (x % 2 == 0) {
int x = start % 2;
} else {
int x=3 * start + 1;
}
return x;
}
这个函数中int x;已经声明x是整形,后面的x=start%2和x=3*start+1前面不要加int,这种声明加赋值的语句本来就是有问题的


2025-08-10 15:45:24
广告
不感兴趣
开通SVIP免广告
  • 九右四分之三
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主你图片里面的那个是什么编译器?


  • 932620623
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
int printWondrous (int start) {
int x;
if (x % 2 == 0) {
int x = start % 2;
} else {
int x=3 * start + 1;
}
return x;
}
我就说说这个函数里的吧,你定义了三个x这是个什么意思,定义一个就行了,如果要使用好几个变量,多定义几个,另外你在使用x%2==0之前没有初始化x的值,这样不会报错但是后出警告,会对程序造成很大的影响,还有就是下面两个x定义了也赋值了,但是赋值完没有再次用到会出这个警告


  • 红色_箱包
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在函数体里应该用形参吧 就是把int x 改成 start


  • weijincai16
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
int printWondrous (int start) {
int x;//这个x记为x1
if (x % 2 == 0) {
int x = start % 2;//这个x记为x2
} else {
int x=3 * start + 1;//这个x记为x3
}
return x;//返回x1,显然x2,x3,没有用到
}


  • 王小波986
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你在PrintWondrous涵数中的x没有初始化,而且x定义了朵次,一次就好了


  • Break
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
x是形参传递吧。。还定义几遍x,定义了还没赋初值,好乱好乱


2025-08-10 15:39:24
广告
不感兴趣
开通SVIP免广告
  • F2Kwho
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



感谢大家的建议提醒,经过几个小时(真是笨啊)。。。我把方程又改了一些,又发现了一些错误。。。
首先先说一下这个程序思路
1.输入一个大于0的数进去
2.如果是偶数就除以二得到新数
3.如果是奇数乘3加1得到新数
4.新数继续计算,如果是1,方程结束
5.然后会打印出来一共打印了几个数(有点绕)
然后说一下问题
1.main可能还是有点乱。。。
2.当我把printWondrous里的x设定一个值以后,它会一直以那个值进行计算。。。(不知道这么说能不能懂)
e.g. 假设printWondrous的int x=5 ,main x =3
printWondrous 会对x=5进行判断计算而不是3
3.如果我不设定初始值就会出错
最后,特别感谢@幸运之王 和 @315222904


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 53回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示