我在使用不同方法时遇到以下代码问题。 当我运行我的代码并输入2作为我的参数时,我得到一个零和1的无限循环。 我不确定该部分有什么问题。 任何帮助都会很棒。谢谢!
/*global variables*/
int CPI[];
int Count[];
每当我选择1作为我的参数时,我输入3作为我的指令类但是我无法输入第3类的CPI甚至第3类的指令数。一旦我输入CPI和第2类的指令数结束。
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");
}
}
}
答案 0 :(得分:0)
&#34;每当我选择1作为我的参数时,我输入3作为我的指令类但是我无法输入第3类的CPI甚至第3类的指令数。一旦我输入CPI和指令数第2课它结束了。&#34;
这是因为你告诉它。这里:
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] */
}
您的代码还有很多其他问题,包括CPI
似乎正在使用的全局变量Count
和SelectTwo()
与{{1}不同的事实正在写入,因为在SelectOne()
中你创建了隐藏它们的同名的局部变量。
编辑:您编辑了问题以显示全局数组的定义:
SelectOne()
这实际上做的是声明一个不完整的类型,因为你没有提供大小。一旦你到达翻译单元的末尾,如果数组仍然有一个不完整的类型,那么它假定有一个元素,这在程序启动时设置为零。因此,您有效地创建单元素数组,因此尝试在int CPI[];
int Count[];
中循环遍历多个元素只是未定义且无意义的行为。
如上所述,SelectTwo()
使用的CPI
和Count
与您在全局定义的SelectOne()
和SelectTwo()
不同,因此SelectOne()
不会从int CPI[3];
int Count[3];
读取1}}写信给。
如果你想使用像这样的全局数组,你必须提供一个大小,例如
malloc()
如果您不想提供尺寸(例如,因为您希望用户选择尺寸),那么您必须使用{{1}}或定义变量函数中的length数组,并将其传递给需要它的函数。