这是程序。它完全被评论了它的目标是什么等等。问题是两个:
a)我得到了典型的错误:“当我创建函数的原型时,数据定义没有类型或存储类。
b)输入scanf问题的输入并按回车键后,我仍然需要输入任何字母并再次按回车键继续执行该程序,否则它不会进展:谢谢
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
/* Object:
* A program that allows upon user input recreate structures
* with different names. Except when entering 'n', it will always
* ask "Do you want to create a new book (structure)?
* It is about storing books, title, author, price, and pages */
// 1. I create the blue print of the structure (forget about typedef...)
struct book {
char title[100];
int pages;
int price;
char author[50];
} ;
// 2. I declare some variables
char wants;
char name [30];
// 3. Function prototypes
question();
create_structure_name();
// +++++++++++++++++++++++++++++++++++++++++++++++++++
create_structure_name(){
printf("Give a name to your structure: ");
fflush(stdin);
scanf("%s\n", &name);
printf("you have chosen this name %s for the structure: \n", name);
struct book name;
printf("Title: ");
fflush(stdin);
scanf("%s\n", &name.title);
printf("The title is %s: ", name.title);
printf("Paginas: ");
fflush(stdin);
scanf("%d\n", &name.pages);
printf("It has this number of pages %d\n: ", name.pages);
printf("Price: ");
fflush(stdin);
scanf("%d\n", &name.price);
printf("The price is %d: ", name.price);
printf("Author: ");
fflush(stdin);
scanf("%s\n", &name.author);
printf("The author is %s: ", name.author);
}
// I define the function ++++++++++++++++++++++++++++
question()
{
printf("Do you want to create a new book? :");
fflush(stdin);
scanf("%c\n", &wants);
while(wants!= 'n')
{
create_structure_name();
}
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++
main(void)
{
create_structure_name();
question();
system("PAUSE");
}
答案 0 :(得分:3)
您的格式很奇怪,而且存在很多问题。
您需要学习如何编写函数声明,尤其是返回类型的含义。
应该是例如void create_structure_name(void);
。
另一个:全局变量char name[30];
被struct book name;
函数内的create_structure_name
遮蔽。
答案 1 :(得分:3)
question();
不是一个体面的原型。原型应具有返回类型和参数,例如:
void question (void);
同样适用于您的功能定义。
这些事情在我小时候可能有用(在K&amp; R年期间),但现在有更好的办法: - )
答案 2 :(得分:2)
首先,您的格式化使您的代码不完全可读。
其次main(
应为int main(
并返回结果
第三,不要在输入流上调用fflush
。它有不确定的行为。
第四,您使用scanf
。切勿使用scanf
。 EVER。从控制台读取整行(使用fgets
,而不是gets
(这会让您为另一个痛苦的世界做好准备))然后使用sscanf
和 记得检查返回的结果。