C编程,需要帮助将用户输入转换为for循环

时间:2017-02-13 20:42:22

标签: c

因此,此C程序显示一个菜单,并要求用户输入1-4中的数字。如果选择了一个,程序则要求用户输入参数。然后再次显示菜单。如果选择2,则程序应在格式化的表中显示用户的输入。这就是我遇到麻烦的地方,我不知道如何将用户输入到for循环中以在格式化的表中打印出来。这是我目前的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int numOfInst, totalCycles, totalInst, clockRate;

void parameters(){
totalInst = 0;
totalCycles = 0;
int counter, cpiClass, instCount;

printf("Enter the number of instruction classes: \n");
scanf(" %d", &numOfInst);
printf("Enter the frequency of the machine (MHz): \n");
scanf(" %d", &clockRate);

for (counter = 0; counter < numOfInst; counter++){
    printf("Enter CPI of class %d: ", counter + 1);
    scanf(" %d", &cpiClass);
    printf("Enter instruction count of class %d (millions): ", counter + 1);
    scanf(" %d", &instCount);

    totalInst += instCount;
    totalCycles += cpiClass * instCount;
}
    return;

} 

float avgCPI(){
float avg = totalCycles / ((float)totalInst);
return (avg);
}

float execTime(){
float time = (totalCycles / ((float)clockRate)) * 1000;
return (time);
}

float calcMips(){
float mips = totalInst / (totalCycles / ((float)clockRate));
return (mips);

}
void printParam(){
int i;
printf("-------------------------\n");
printf("| Class\t | CPI\t |Count\t |\n");
for (i  = 0; i < numOfInst; i++);
printf(" %d\t", (i));
/*totalCycles[i], totalInst[i]);*/
return;
}

/*void printPerformance{
}*/
int main()
{
int option;
do {
    printf("Performance assessment: ");
    printf("\n-----------------------");
    printf("\n1) Enter parameters: ");
    printf("\n2) Print table of parameters: ");
    printf("\n3) Print table of performance ");
    printf("\n4) Quit \n");
    scanf(" %d", &option);

    switch (option){
    case 1: parameters();
        break;
    case 2: printParam();
        break;
    case 3:
        break;
    case 4:
        break;
    default: printf("Invalid input, please enter a number from 1-4 ");


    }


}while(option != 4);
return 0;
}

2 个答案:

答案 0 :(得分:0)

注意你只有int变量来存储numOfInst,totalCycles,totalInst和clockRate。这意味着无论何时为这些变量赋值,前一个值都会被覆盖并丢失。为了打印出所有以前的输入,您必须将它们存储在某些数据结构中(提示:查看列表或散列图)。使用数组存储输入也可以,但这会限制您可以存储到数组大小的输入数量。

答案 1 :(得分:0)

  

<强>代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int cpiClass[10000], instCount[10000], numOfInst;
void parameters(){
    int counter;
    printf("Enter the number of instruction classes: \n");
    scanf(" %d", &numOfInst);
    for (counter = 0; counter < numOfInst; counter++){
        printf("Enter CPI of class %d: ", counter + 1);
        scanf(" %d", &cpiClass[counter]);
        printf("Enter instruction count of class %d (millions): ", counter + 1);
        scanf(" %d", &instCount[counter]);
   }
   return;
}
void printParam(){
    int i;
    printf("-------------------------\n");
    printf("| Class\t | CPI\t |Count\t |\n");
    for (i  = 0; i < numOfInst; i++){
        printf(" %d\t%d\t%d\t\n", i+1,cpiClass[i],instCount[i]);
    }
    return;
}
int main()
{
    int option;
    do {
        printf("\nPerformance assessment: ");
        printf("\n-----------------------");
        printf("\n1) Enter parameters: ");
        printf("\n2) Print table of parameters: ");
        printf("\n3) Quit \n");
        scanf(" %d", &option);
        switch (option){
        case 1: parameters();
            break;
        case 2: printParam();
            break;
        case 3:
            break;
        default: printf("Invalid input, please enter a number from 1-3 ");
       }
    }while(option != 3);
    return 0;
}

此代码可以作为您接受的输出正常工作。

我在这里编辑的内容:

在第5行,我声明了2个数组并将它们公开。

int cpiClass[1000], instCount[10000], numOfInst;

参数()中,功能行12和14在数组中输入。

scanf(" %d", &cpiClass[counter]);
scanf(" %d", &instCount[counter]);

现在我的所有输入数据都存储在这两个数组中。

在main函数中,当选择选项2时,它显示来自那些数组的数据。

printParam()功能编辑

printf(" %d\t%d\t%d\t\n", i+1,cpiClass[i],instCount[i]);

此打印功能将在您接受时显示您的输出。

  

注意:

如果您与代码进行比较,这里缺少某些功能。我已删除它们,因为显示此输出不需要它们。

  

如果您需要所有代码,请转到here

我已将所有代码包括在内,包括其他功能。