[我正在尝试编写一个程序,该程序可以接受用户的输入(名字,姓氏,分数),并在接受所有这样的输入后将其打印出来。
fname1 lname1 : 99
fname2 lname2 : 23
fname3 lname3 : 29
//Note that all of them are input
我编写了以下程序,它可以工作,但是将最后一次输入打印n次。我知道问题出在哪里,但不知道如何解决。 每次都会在完全相同的位置创建临时数组变量,并使所有元素相同。 如何解决?
#include <stdio.h>
#define LENGTH 3
int main() {
int *score[LENGTH];
char *fname[LENGTH];
char *lname[LENGTH];
for(int i = 0; i < LENGTH; i++){
printf("Enter name and score of batter %d: ",i);
char ftemp[10];
char ltemp[10];
int tempScore;
scanf("%s %s %d", ftemp, ltemp, &tempScore);
fname[i] = ftemp;
lname[i] = ltemp;
score[i] = &tempScore;
}
for(int i = 0; i < LENGTH; i++){
printf("%s %s %d\n", fname[i], lname[i], *score[i]);
}
}
我认为您正在尝试将对局部变量的引用分配给score,fname和lname。您不能这样做,因为它会在退出其作用域时被破坏,而不是尝试此操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 3
int main() {
int *score[LENGTH];
char *fname[LENGTH];
char *lname[LENGTH];
for(int i = 0; i < LENGTH; i++){
printf("Enter name and score of batter %d: ",i+1);
char ftemp[10];
char ltemp[10];
int tempScore;
scanf("%s %s %d", ftemp, ltemp, &tempScore);
fname[i] = malloc(strlen(ftemp));
lname[i] = malloc(strlen(ltemp));
score[i] = malloc(sizeof(int));
if(fname[i]==NULL||lname[i]==NULL||score[i]==NULL)
{
printf("Memory Error");
exit(1);
}
else
{
strcpy(fname[i],ftemp);
strcpy(lname[i],ltemp);
*score[i]=tempScore;
}
}
for(int i = 0; i < LENGTH; i++){
printf("%s %s %d\n", fname[i], lname[i], *score[i]);
}
}