关于c语言结构体初始化的问题

Blade_19901227 2016-09-14 01:37:03
程序如下:
#include <stdio.h>
#include <string.h>

struct Books
{
char title[50];
char author[50];
int book_id;
};

int main()
{

struct Books Book[2];
int i,j;

/*给结构体数组赋值*/
for (i=0;i<=2;i++)
{
scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);
}
/*显示结构体内容*/
for (j=0;j<=2;j++)
{
printf( "Book[%d] title : %s\nBook[%d] author : %s\nBook[%d] book_id : %d\n", j, Book[j].title,j, Book[j].author, j, Book[j].book_id);

}
return 0;
}

控制台输入:
MIke jjkjk 100
Joe kjkjk 89
Jack jjjjk 77
jkhj jhjhj jhjhk (此处如果不输入,程序无法进行,也是问题所在。赋值的地方循环三次,此处却要求输入四组值)

控制台能正确显示;
求高手告知原因
...全文
312 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-09-15
  • 打赏
  • 举报
回复
 scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);//这样会吃掉输入的回车,回车就不能结束输入了。
//改成 
 scanf(" %s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id); //第一个字符串不允许空白,空行等,输入的空白符,会被吃掉
//或者 
scanf("%s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id);//第一个字符串可以是空白,空行等
PS: 输入的时候,开始的回车(等空白符)可以吃掉, 如果不需要输入一行的空格,以及空行等的的话 结尾的回车,不要吃掉,因为scanf 输入,是以回车结束的 如果格式的最后是空白符, 就会把所有输入的空白符吃掉直到输入非空白为止。
leon_zeng0 2016-09-14
  • 打赏
  • 举报
回复
你用单步调试看看就知道了。比如第一次输入后,程序到哪里了i=?
yq12345665432 2016-09-14
  • 打赏
  • 举报
回复
将字符串读入字符数组不需要用&
Lighbabe 2016-09-14
  • 打赏
  • 举报
回复
而且你使用scanf需要接着使用个getchar清除掉回车,四处错误,数组个球错误与约束条件错误,已经scanf使用的错误
Lighbabe 2016-09-14
  • 打赏
  • 举报
回复
除了scand有错,你还需要看到你的for里的条件也错了,你的结构体数组知有两个
paschen 2016-09-14
  • 打赏
  • 举报
回复
scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id); scanf里面去掉\n 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符包括空格,\t,\n等等,直到第一个非空白符出现为止。
小灸舞 版主 2016-09-14
  • 打赏
  • 举报
回复
scanf("%s %s %d\n", &Book[i].title, &Book[i].author, &Book[i].book_id);这句里面多了一个'\n'

#include <stdio.h>
#include <string.h>

struct Books
{
	char  title[50];
	char  author[50];
	int   book_id;
};

int main()
{

	struct Books Book[2];
	int i, j;

	/*给结构体数组赋值*/
	for (i = 0; i <= 2; i++)
	{
		scanf("%s %s %d", &Book[i].title, &Book[i].author, &Book[i].book_id);
	}
	/*显示结构体内容*/
	for (j = 0; j <= 2; j++)
	{
		printf("Book[%d] title : %s\nBook[%d] author : %s\nBook[%d] book_id : %d\n", j, Book[j].title, j, Book[j].author, j, Book[j].book_id);

	}
	return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧