C 函数未正确返回计数时
我正在尝试使用while函数计算一个指针大于0的值 我需要的是计算返回值大于0的金额 以下是我使用的零件代码,同时:C 函数未正确返回计数时,c,loops,while-loop,C,Loops,While Loop,我正在尝试使用while函数计算一个指针大于0的值 我需要的是计算返回值大于0的金额 以下是我使用的零件代码,同时: struct mode { int m_mode_max[10]; ... } struct gained_var { struct mode var1[10]; ... } struct fs_session { struct gained_var gained[5]; ... } void frist_gained(str
struct mode {
int m_mode_max[10];
...
}
struct gained_var {
struct mode var1[10];
...
}
struct fs_session {
struct gained_var gained[5];
...
}
void frist_gained(struct fs_session *fs, int value) {
struct itv_expanse itv[5];
memset(itv, 0, sizeof(itv));
for (int i = 0; i < 5; i++) {
int count = 0;
for (int p = 0; p < 10; p++) {
while (fs>gained[value].var1[i].m_mode_max[p] > 0) {
count++;
printf("count %d\n", count);
}
}
}
itv[value].var1[i].m_mode = fs>gained[value].var1[i].m_mode_max[rand()%count];
printf("m_mode %d rnd_value %d\n", itv[value].var1[i].m_mode, rnd()%count);
}
结构模式{
int m_mode_max[10];
...
}
结构变量{
结构模式var1[10];
...
}
结构fs_会话{
结构获得(var获得)[5];;
...
}
获得的第一个无效值(结构fs\u会话*fs,int值){
结构itv_扩展itv[5];
memset(itv,0,sizeof(itv));
对于(int i=0;i<5;i++){
整数计数=0;
对于(int p=0;p<10;p++){
而(fs>gound[value].var1[i].m\u mode\u max[p]>0){
计数++;
printf(“计数%d\n”,计数);
}
}
}
itv[value].var1[i].m_mode=fs>获得[value].var1[i].m_mode_max[rand()%count];
printf(“m_模式%d rnd_值%d\n”,itv[value].var1[i].m_模式,rnd()%count);
}
我可以使用if函数来检查计数,但我想使用While
使用while函数执行此操作的最佳方法是什么?您需要更改while函数中条件的值
while (<SOMETHING> > 0) {
// change the value of <SOMETHING>, otherwise
// you get an infinite loop
}
while(>0){
//更改的值,否则为
//你得到一个无限循环
}
对你来说,可能是
while (fs>gained[value].var1[i].m_mode_max[p] > 0) {
count++; // does not change fs>gained[value].var1[i].m_mode_max[p]
printf("count %d\n", count); // does not change fs>gained[value].var1[i].m_mode_max[p]
p++; // <== change fs>gained[value].var1[i].m_mode_max[p]
}
while(fs>获得[value].var1[i].m\u mode\u max[p]>0){
count++;//不更改fs>govered[value].var1[i].m_mode_max[p]
printf(“count%d\n”,count);//不更改fs>govered[value].var1[i].m_mode_max[p]
p++;//获得[value].var1[i].m_mode_max[p]
}
您已经在i
和p
上循环,以遍历该结构。您需要一个if
来决定递增计数器
问题是每次计数递增时,您都要打印计数。也许您应该只在循环完成时打印它
for (int i = 0; i < 5; i++) {
int count = 0;
for (int p = 0; p < 10; p++) {
// Typo fix: fs>gained to fs->gained
if (fs->gained[value].var1[i].m_mode_max[p] > 0) {
count++;
}
}
printf("i: %d, count: %d\n", i, count);
}
是否有必要检查p 0)是的,@Sombra,在这个特定的例子中这是一个非常好的主意:)虽然它应该是
,但是(p<10&&…
这不是与已经在p
上迭代的for
循环冗余吗?是否应该将它们组合起来?的必须删除,因为while内部有p++
@pmg不while(p<10&&fs->获得[value].var1[i].m_mode_max[p]>0)
工作吗?循环将在fs>获得[value]后立即退出。var1[i].m_mode_max[p]如果或而是一个函数,同样地,对于其他关键字,包括开关
,返回
,甚至大小
。如果有多个实例fs>获得[value]。var1[i].m_mode_max[p] >0
这算一次还是多次?为什么要在这里使用while
呢?在for
中使用if
是合适的。只是为了学会使用所有的可能性。所以我最后说我可以使用if条件,我想知道更多关于while的信息
for (int i = 0; i < 5; i++) {
int count = 0;
for (int p = 0; p < 10; p++) {
// Typo fix: fs>gained to fs->gained
if (fs->gained[value].var1[i].m_mode_max[p] > 0) {
count++;
break;
}
}
printf("i: %d, count: %d\n", i, count);
}