当前位置:编程学习 > C/C++ >>

新手求助啊C语言问题

#include <stdio.h>  

 


struct hotel                                                  /*测试用请删除*/
    {                                                         /*测试用请删除*/
           int room_number;                                   /*测试用请删除*/
           char name[20];                                     /*测试用请删除*/
           int sign;                                          /*测试用请删除*/
           char id[19];                                       /*测试用请删除*/
           long int tel;                                      /*测试用请删除*/
                                                              /*测试用请删除*/
    }room[5][5]={0};                                          /*测试用请删除*/

 

 

 

 

 


void main()
{
   

   int x,y,i,n=0;                                            /*x,y是结构体下标,x为楼层数,y为房间号,i为循环控制体,n为ID位数*/
   printf("请输入你要定的房间楼层数:\n");
   scanf("%d",&x);
   while (x>=6||x<=0)                                         /*判断是否合法*/
       {
        printf("\n对不起你输入的层数有误请重新输入!\n");
        printf("请输入你要定的房间楼层数:\n");
        scanf("%d",&x);
        }
   printf("成功!");
   printf("\n请输入你要定的房间号:\n");
   scanf("%d",&y);
   while (y>=6||y<=0)                                         /*判断是否合法*/
       {
        printf("对不起你输入的房间号有误请重新输入!\n");
        printf("请输入你要定的房间号:\n");
        scanf("%d",&y);
        }
   while (room[x][y].sign==1)                                  /*判断房间是否为空*/
       {
        printf("\n你输入的房间已满请重新输入!\n");
        printf("请输入你要定的房间楼层数:\n");
        scanf("%d",&x);
        while (x>=6||x<=0)
       {
        printf("对不起你输入的层数有误请重新输入!\n");
        printf("请输入你要定的房间楼层数:\n");
        scanf("%d",&x);
        }
        printf("\n请输入你要定的房间房间号:\n");
        scanf("%d",&y);
        while (y>=6||y<=0)
       {
        printf("对不起你输入的房间号有误请重新输入!\n");
        printf("请输入你要定的房间号:\n");
        scanf("%d",&y);
        }
        } 
   printf("\n开始订房.......\n");                             /*输入合法,开始录入*/
   printf("请输入你的姓名:\n");                              /*从此处开始逻辑出错!*/
   gets(room[x][y].name);
   printf("\n请输入你的ID:\n");
   gets(room[x][y].id);                                       /*请把id号定义成id[19]留出足够空间!*/
   printf("你输入的ID号为:%c",room[x][y].id);                /*测试用*/
   for(i=0; ;i++)
        if(room[x][y].id[i]!='\0')
           n++;
        else
           break;
   printf("你输入的ID号位数为\n%d\n",n);                     /*测试用*/
   while (n<18)                                              /*判断是否合法*/
        {
         printf("对不起你输入的ID号有误请重新输入!\n");
         printf("请输入你的ID:\n");
         scanf("%d",&room[x][y].id);
        }
   printf("\n请输入你的联系方式:\n");
   scanf("%l",&room[x][y].tel);                               /*这里定义变量时请用长整形谢谢合作!*/
   while (room[x][y].id[19]/10000000<1)                       /*判断是否合法*/
        {
         printf("对不起你输入的联系方式有误请重新输入!\n");
         printf("请输入你的联系方式:\n");
         scanf("%d",&room[x][y].id[19]);
        };
   room[x][y].sign=1;                                         /*数据录入成功订房成功*/
   }

 

 

 

新手自己写的啊,运行时好多错误求高手改错啊,自己已经晕了。。。。

追问:嘿嘿我选你你能在QQ上在教教我么?

答案:
我说,你到底是闹哪样啊?


%c对应的是char类型的单个字符,你居然用char类型的字符串;
%l这个根本没有,要用就改成%ld,表示的是long int类型;


数据结构没弄好,有的数据可以用char类型的字符串储存,你却用long int型变量。




你的代码的警告信息已经写在代码边上,以下是你的代码:
#include <stdio.h>




struct hotel {  
  int room_number; 
  char name[20]; 
  int sign;   
  char id[19]; 
  long int tel;  //用char型字符串更好
  /*测试用请删除 */
} room[5][5] = {0};//赋初始值有问题












void main()//警告: ‘main’的返回类型不是‘int’
{


  int x, y, i, n = 0;
  printf("请输入你要定的房间楼层数:\n");
  scanf("%d", &x);
  while (x >= 6 || x <= 0) {
    printf("\n对不起你输入的层数有误请重新输入!\n");
    printf("请输入你要定的房间楼层数:\n");
    scanf("%d", &x);
  }
  printf("成功!");
  printf("\n请输入你要定的房间号:\n");
  scanf("%d", &y);
  while (y >= 6 || y <= 0) {
    printf("对不起你输入的房间号有误请重新输入!\n");
    printf("请输入你要定的房间号:\n");
    scanf("%d", &y);
  }
  while (room[x][y].sign == 1) { 
    printf("\n你输入的房间已满请重新输入!\n");
    printf("请输入你要定的房间楼层数:\n");
    scanf("%d", &x);
    while (x >= 6 || x <= 0) {
      printf("对不起你输入的层数有误请重新输入!\n");
      printf("请输入你要定的房间楼层数:\n");
      scanf("%d", &x);
    }
    printf("\n请输入你要定的房间房间号:\n");
    scanf("%d", &y);
    while (y >= 6 || y <= 0) {
      printf("对不起你输入的房间号有误请重新输入!\n");
      printf("请输入你要定的房间号:\n");
      scanf("%d", &y);
    }
  }
  printf("\n开始订房.......\n"); 
  printf("请输入你的姓名:\n");
  gets(room[x][y].name);
  printf("\n请输入你的ID:\n");
  gets(room[x][y].id); 
  printf("你输入的ID号为:%c", room[x][y].id); //警告: 格式'%c'对应的是int类型的参数,但参数2类型为‘char *’
  //下面的for循环是计算ID号的长度
  for (i = 0;; i++)
    if (room[x][y].id[i] != '\0')
      n++;
    else
      break;
      
  printf("你输入的ID号位数为\n%d\n", n); 
  
  while (n < 18) {  
 //n没变化,那不是一直循环吗?
    printf("对不起你输入的ID号有误请重新输入!\n");
    printf("请输入你的ID:\n");
    //一个int类型变量赋值给一个char型字符串,能不出问题吗?
    scanf("%d", &room[x][y].id);//警告: 格式'%d'对应的是int*类型的参数,但参数2类型为‘char *’
    //输入完后,需要重新计算长度,用n保存
  }
  printf("\n请输入你的联系方式:\n");
  //电话用字符串储存好一些,况且,你这个%l有问题,要用就用%ld,表示的是long int类型
  scanf("%l", &room[x][y].tel);//警告: 格式字符串末尾的转换缺少类型,提供给格式字符串的实参太多
  while (room[x][y].id[19] / 10000000 < 1) 
  { //这里,怎么用char型字符串的第19个元素的值除以10000000 ?
   //明明是联系方式,你怎么保存在id里?到底是闹哪样啊?
    printf("对不起你输入的联系方式有误请重新输入!\n");
    printf("请输入你的联系方式:\n");
    scanf("%d", &room[x][y].id[19]);//警告: 格式'%d'对应的是int类型的参数,但参数2类型为‘char *’
  };
  room[x][y].sign = 1; 
}








以下是修改后的代码:


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


struct hotel {
  int room_number;
  char name[20];
  int sign;
  char id[19];  
  char tel[20];                 //改用字符串
};




int main()
{
  struct hotel room[5][5];
  int x, y;
  
  memset(room, 0, sizeof(room));//清空置0
  
  printf("请输入你要定的房间楼层数:\n");
  scanf("%d", &x);
  while (x >= 6 || x <= 0) 
  {    /*判断是否合法 */
    printf("\n对不起你输入的层数有误请重新输入!\n");
    printf("请输入你要定的房间楼层数:\n");
    scanf("%d", &x);
  }
  
  printf("成功!");
  printf("\n请输入你要定的房间号:\n");
  scanf("%d", &y);
  
  while (y >= 6 || y <= 0) 
  {    /*判断是否合法 */
    printf("对不起你输入的房间号有误请重新输入!\n");
    printf("请输入你要定的房间号:\n");
    scanf("%d", &y);
  }
  
  while (room[x][y].sign == 1) 
  {  /*判断房间是否为空 */
    printf("\n你输入的房间已满请重新输入!\n");
    printf("请输入你要定的房间楼层数:\n");
    scanf("%d", &x);
    while (x >= 6 || x <= 0) 
    {
      printf("对不起你输入的层数有误请重新输入!\n");
      printf("请输入你要定的房间楼层数:\n");
      scanf("%d", &x);
    }
    printf("\n请输入你要定的房间房间号:\n");
    scanf("%d", &y);
    while (y >= 6 || y <= 0) 
    {
      printf("对不起你输入的房间号有误请重新输入!\n");
      printf("请输入你要定的房间号:\n");
      scanf("%d", &y);
    }
  }
  
  printf("\n开始订房.......\n");
  printf("请输入你的姓名:\n"); 
  scanf("%s", room[x][y].name);
  printf("\n请输入你的ID:\n");
  scanf("%s", room[x][y].id); 
  printf("你输入的ID号为:%s\n", room[x][y].id);
  /* 用strlen函数计算id的长度 */
  printf("你输入的ID号位数为:%d\n", strlen(room[x][y].id));  
  
  while (strlen(room[x][y].id) < 18) 
  {              /* ID的长度必须是18个字符,否则,一直循环,重新输入 */
    printf("对不起你输入的ID号有误请重新输入!\n");
    printf("请输入你的ID:\n");
    scanf("%s", room[x][y].id);
  }
  
  printf("\n请输入你的联系方式:\n");
  scanf("%s", room[x][y].tel); 
  
  while (strlen(room[x][y].tel) < 8) 
  {  /*判断是否合法 */
    printf("对不起你输入的联系方式有误请重新输入!\n");
    printf("请输入你的联系方式:\n");
    scanf("%s", room[x][y].tel);
    //如果联系方式的长度小于8个字符,就继续循环,重新输入
  }
  //话说,你的程序退出后,这些数据也就没了,除非你把它们保存至文件,程序启动后读取文件,载入数据
  room[x][y].sign = 1;          /*数据录入成功订房成功 */
  
  return 0;
}


消灭了所有警告和错误,部分内容做了修改。


一下是效果图:



晕,这也不懂肯定是缺少

上一个:C语言的 指针问题
下一个:不会英语能学c语言吗

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,