gpt4 book ai didi

c - C中的无限循环,有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 21:40:01 24 4
gpt4 key购买 nike

我在不同方法中使用以下代码时遇到问题。当我运行代码并输入 2 作为参数时,我得到一个由 0 和 1 组成的无限循环。我不确定该部分有什么问题。任何帮助都会很棒。谢谢!

/*global variables*/
int CPI[];
int Count[];

每当我选择 1 作为我的参数时,我都会输入 3 作为我的指令类别,但是我无法输入 3 类的 CPI,甚至无法输入 3 类的指令数。一旦我输入 2 类的 CPI 和指令数,它就会出现。结束。

void SelectOne(){
tot = 0;
printf("\n Enter the number of instruction classes: ");
scanf("%d", &n);

printf("\n Enter the frequency of the machine (MHz): ");
scanf("%d", &f);

int CPI[n];
int Count[n];

int a;
for(a = 1; a < n; a++){

/*printf("%d",n);*/

printf(" Enter CPI of class %d : ", a);
scanf("%d", &CPI[a-1]);

printf(" Enter instruction count of class %d : ", a);
scanf("%d", &Count[a-1]);
tot =+ Count[a-1];

}

}

这是我获得 0 和 1 的无限循环的方法。

void SelectTwo(){

printf("\n ---------------------------");
printf("\n +Class/t + CPI/t +Count +");

int a;
for(a = 1; a <= n; a++){
printf("\n %d\t + %d\t + %d ", a, CPI[a-1], Count[a-1]);

}


}

我相信我的问题是主要的,但我不确定如何解决这个问题。

int main(){

int sel = 1;

while(sel != 4){
printf("\n 1) Enter Parameters ");
printf("\n 2) Print table of parameters ");
printf("\n 3) Print table of performance ");
printf("\n 4) Quit");

printf("\n \n Enter Selection: ");
scanf("%d", &sel);

if(sel == 1){
SelectOne();
}
if(sel == 2){
SelectTwo();
}
if(sel == 3){
SelectThree();
}
else{
printf("quit");
}


}

}

最佳答案

“每当我选择1作为我的参数时,我都会输入3作为我的指令类别,但是我无法输入第3类的CPI,甚至无法输入第3类的指令数。一旦我输入第2类的CPI和指令数结束了。”

这是因为你告诉它的。这里:

for(a = 1; a < n; a++){

如果您输入3 ,则当 a == 1 时循环运行一次,第二次时 a == 2 ,然后退出,因为 a < 3不再是真的。你想要这个:

for( a = 0; a < n; a++ ){      /*  Change a = 1 to a = 0  */
printf(" Enter CPI of class %d : ", a + 1);
scanf("%d", &CPI[a]); /* Change [a-1] to [a] */

printf(" Enter instruction count of class %d : ", a + 1);
scanf("%d", &Count[a]); /* Change [a-1] to [a] */
tot += Count[a]; /* Change =+ to += and [a-1] to [a] */
}

不过,您的代码还有很多其他问题,包括全局变量 CPICountSelectTwo()似乎使用的与 SelectOne() 不同。正在写信给,因为在 SelectOne()您创建隐藏它们的同名局部变量。

编辑:您编辑了问题以显示全局数组的定义:

int CPI[];
int Count[];

这实际上是声明一个不完整的类型,因为您没有提供大小。一旦到达翻译单元的末尾,如果数组仍然具有不完整的类型,则假定它有一个元素,在程序启动时将其设置为零。因此,您正在有效地创建单元素数组,因此尝试循环 SelectTwo() 中的多个元素只是未定义且无意义的行为。

如上所述,CPICountSelectOne()使用的与您在全局定义的不同,因此 SelectTwo()没有读到什么SelectOne()正在写信给。

如果你想使用这样的全局数组,你必须提供一个大小,例如

int CPI[3];
int Count[3];

如果您不想提供尺寸(例如,因为在这里您希望用户选择尺寸),那么您必须使用 malloc()或者在函数中定义一个可变长度数组并将其传递给需要它的函数。

关于c - C中的无限循环,有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25925282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com