C:显示结构,简单,完整的短程序代码

时间:2013-08-28 08:48:07

标签: c structure

这是程序。它完全被评论了它的目标是什么等等。问题是两个:

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");

                  }

3 个答案:

答案 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 记得检查返回的结果。