0

这是程序。它充分评论了它的目标等。问题有两个:

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

                  }
4

3 回答 3

3

你的格式很奇怪,有很多问题。

您需要学习如何编写函数声明,尤其是返回类型的含义。

它应该是例如void create_structure_name(void);

另一个:全局变量char name[30];被函数struct book name;内部隐藏。create_structure_name

于 2013-08-28T08:51:15.153 回答
3
question();

不是一个像样的原型原型应该有返回类型和参数,例如:

void question (void);

同样适用于您的函数定义

当我还是个男孩的时候(在 K&R 年代),这些事情可能已经奏效了,但现在有更好的做事方式:-)

于 2013-08-28T08:52:42.863 回答
2

首先,您的格式使您的代码不完全可读。

其次main(应该是int main(并返回一个结果

第三,不要调用fflush输入流。它具有未定义的行为。

第四,您使用scanf. 永远不要使用scanf. 曾经。从控制台读取一整行(使用fgets,而不是gets(这会让你陷入另一个痛苦的世界)),然后使用sscanf记住检查返回的结果。

于 2013-08-28T10:44:33.713 回答