c - C 中的结构 - 不打印整个字符串

标签 c data-structures

致力于一些理解 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));
}

最佳答案

namecity 只是单个字符:它们不是字符串。

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;
};

如果事先不知道 namecity 的最大可能长度,则在填充之前动态分配内存。

printf() 语句更改为:

printf("Name:\t\t\t%s\n", name);
printf("City:\t\t\t%s\n", city);

scanf()语句:

scanf("%s",ptr->name);
scanf("%s",ptr->city);

screen_print()签名:

void screen_print(char* name,char* city,int wins,int losses,int draws)

关于c - C 中的结构 - 不打印整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553437/

相关文章:

c - C语言中使用栈作为链表的中缀到后缀

c - 如何使用(UART)总线在数据流和控制之间切换

c - 比变量小的指针类型

c++ - 当 b 不为零时,我总是有 `(a/b * b) + a % b == a` 吗?

java - 哈希表实现 iterate 和 findMin

c - 为什么++ 和 -- 只在变量前后使用?

c - bison 和 flex 的 Typedef 问题

c# - 找到搜索数据结构字符串比较的最佳方法

matlab - Octave - 获取结构摘要的简单方法是什么?

c - 反转链表中的最后 5 个节点