在理解C中的结构时进行一些自学.
我做了一个小程序,从用户那里获取信息,然后通过函数打印回来.我使用了两种不同的方法,使用C Primer Plus书中的几个例子来传递数据.
发生的事情是我可以输入数据,但是当它打印出来时数字数据是可以的,但只有每个字符串中的第一个字符后面会打印出垃圾.
我的代码在下面进行审核.我无法弄清楚问题是什么.
任何帮助都会很棒.谢谢!
#include <stdio.h>
#include <stdlib.h>
struct stats {
char name;
char city;
int wins;
int losses;
int draws;
};
void screen_print(char name,char city,int wins,int losses,int draws);
void team_input (struct stats * ptr);
int main()
{
struct stats team;
team_input(&team);
screen_print(team.name,team.city,team.wins,team.losses,team.draws);
return 0;
}
void screen_print(char name,char city,int wins,int losses,int draws)
{
// system("cls");
printf("==================================================\n");
printf("Name:\t\t\t%s\n",&name);
printf("City:\t\t\t%s\n",&city);
printf("Number of Wins:\t\t%d\n",wins);
printf("Number of Losses:\t%d\n",losses);
printf("Number of Draws:\t%d\n",draws);
printf("==================================================");
}
void team_input (struct stats * ptr)
{
system("cls");
printf("Enter Team name: ");
scanf("%s",&(ptr->name));
printf("\nEnter City:");
scanf("%s",&(ptr->city));
printf("\nEnter Wins:");
scanf("%d",&(ptr->wins));
printf("\nEnter Losses:");
scanf("%d",&(ptr->losses));
printf("\nEnter Draws:");
scanf("%d",&(ptr->draws));
}
Run Code Online (Sandbox Code Playgroud)
name并且city只是单个字符:它们不是字符串.
scanf("%s",&(ptr->name));无效,将覆盖内存,因为正在尝试将字符串读入单个字符串char.
printf("%s", &name);期望name是一个以空字符结尾的字符串,因此它将打印name char随后的随机字符,直到在内存中的某处找到null.
改成:
struct stats {
char name[20]; /* Or greater than 20 if required */
char city[20];
int wins;
int losses;
int draws;
};
Run Code Online (Sandbox Code Playgroud)
或者在填充之前动态分配内存,如果事先知道最大可能长度name和city未知.
将printf()语句更改为:
printf("Name:\t\t\t%s\n", name);
printf("City:\t\t\t%s\n", city);
Run Code Online (Sandbox Code Playgroud)
并scanf()声明:
scanf("%s",ptr->name);
scanf("%s",ptr->city);
Run Code Online (Sandbox Code Playgroud)
并screen_print()签名:
void screen_print(char* name,char* city,int wins,int losses,int draws)
Run Code Online (Sandbox Code Playgroud)