不知道为什么我在char数组中得到第一个元素的输出

时间:2016-10-24 18:07:54

标签: c string algorithm

Output

我得到第一个进程ID名称的奇怪输出,不知道为什么。也许我告诉它打印char数组的方式?

以下代码:

int main(){

int a; //variable used for: total number of processes
int i,j,k,l; //used for loops
int t1; //temporary variables
int burst[10],ttime[10],wait[10];
char process_name[10][11]; // array for storing up to 10 strings, with each up to length of 10 characters
char process_name_temp[10][11]; //temp variable for process name

float wait_time,wait_time_avg;



/*Pre-Fill burst and wait arrays with times of 0*/
for(i=0;i<10;i++){

    burst[i]=0;
    wait[i]=0;
}

wait_time_avg = 0; //set the wait time average to zero

printf("Please Enter Total Number of Processes Desired\n"); //

scanf("%d",&a); //get input from user:total number of processes

/*get user input from user: burst time for each process, process name for each process*/
for(i=0;i<a;i++){

    printf("Please Enter Process Name(one word)\n");
    scanf("%s", &process_name[i][11]);
    printf("Please Enter Burst Time\n");
    scanf("%d", &burst[i]);

}

for(i=0;i<a;i++){

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

        if(burst[i]>burst[j]){

            t1 = burst[i];
            process_name_temp[i][11] = process_name[i][11];
            burst[i] = burst[j];
            process_name[i][11] = process_name[j][11];
            burst[j] = t1;
            process_name[j][11] = process_name_temp[j][11];

        }
    }

wait[0] = 0;

for(i=0;i<a;i++)

    wait[i+1] = wait[i] + burst[i];

for(i=0;i<a;i++){

    //ttime[i] = wait[i] + burst[i];
    wait_time_avg = 0;
    wait_time = 0;
    wait_time_avg = wait_time_avg + wait[i];

}

wait_time_avg = wait_time_avg/a;

printf("\n\t Process ID \t Waiting Time \t Burst Time \n");

for(i=0;i<a;i++)

    printf("\t %s \t\t %d \t\t\t %d \n\n", process_name[i],wait[i],burst[i]);
    printf("Waiting Time Average: %f \n", wait_time_avg);
}

返回0;

}

如果有人能帮助我那会很棒。这可能是一个简单的解决方案 - 我错过或忽视的一点点。谢谢!

1 个答案:

答案 0 :(得分:3)

  1. scanf("%s", &process_name[i][11]);中。这会在process_name数组结束后传递指向一个元素的指针。因此,scanf()来电是错误的,应该是

    scanf("%10s", process_name[i]);
    

    因此,由于process_name数组被错误地初始化,程序显示出未定义的行为。

  2. 您必须专门为scanf()说明符检查"%d"的返回值。如果不这样做,那么你也会因为读取未初始化的数据而调用未定义的行为。

  3. 在开始a < 10循环之前,您应该检查for。因此,在询问用户的项目数量后,请确保用户输入了合理/有效的内容。

  4. 在代码中的嵌套for循环中,您可以访问每个数组中最后一个元素之后的一个元素。索引从0升级到N - 1,因此访问x[N]无法按预期工作。