| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include<stdio.h> 
#include <stdlib.h> 
 
struct Ym 
{ 
        char name[8]; 
        int age; 
        char one_time[11]; 
        char two_time[11]; 
}; 
 
struct Ym* input(struct Ym *pt,int j); 
struct Ym* input(struct Ym *pt,int j) 
{ 
        char ch; 
        printf("请问姓名是:"); 
        scanf("%s",pt[j].name); 
        printf("请问年龄是:"); 
        scanf("%d",&pt[j].age); 
        printf("请问是否接种过疫苗(Y/N):"); 
        getchar(); 
 
         
        if((ch = getchar()) == 'Y') 
        { 
                printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):"); 
                scanf("%s",pt[j].one_time); 
                 
        } 
        else 
        { 
                pt[j].one_time[0] = '0'; 
                return; 
        } 
        printf("请问是否接种过第二针疫苗(Y/N):"); 
        getchar(); 
 
         
        if((ch = getchar()) == 'Y') 
        { 
         
                printf("请输入第二针疫苗接种的日期(yyyy-mm-dd):"); 
                scanf("%s",pt[j].two_time); 
        } 
        else 
        pt[j].two_time[0] = '0'; 
         
        printf("\n\n"); 
 
        return; 
} 
 
 
int main(void) 
{ 
        struct Ym *pt[255]; 
        int i = 0; 
        char j,ch; 
        printf("请问是否要录入疫苗登记(Y/N):"); 
         
        while(1) 
        { 
                ch = getchar(); 
                 
                if(ch == 'Y') 
                { 
                        pt[i] = (struct Ym *)malloc(sizeof(struct Ym)); 
                        input(*pt,i); 
                        i++; 
                        getchar(); 
                } 
                else 
                break;  
                printf("当前已经录入%d人疫苗档案\n请问是否要继续录入疫苗登记(Y/N):",i); 
        }  
         
        printf("====录入数据完毕(总共%d人如下)====\n\n",i); 
        int k; 
        for(k = 0; k < i; k++) 
        { 
                printf("姓名:%s",pt[k]->name);         
                printf("年龄:%d\n",pt[k]->age);         
                if(pt[k]->one_time[0] != '0') 
                printf("第一针疫苗接种日期:%s,",pt[k]->one_time); 
                else 
                { 
                        printf("未接种疫苗!"); 
                        continue; 
                } 
                if(pt[k]->two_time[0] != '0') 
                printf("第二针疫苗接种日期:%s\n\n",pt[k]->two_time); 
                else 
                printf("未接种第二针疫苗!\n\n");  
 
        }          
 
        return 0; 
} 
根据您提供的代码,录入第二个人的资料可能出现错误的原因是getchar()函数没有正确地清空输入缓冲区。 
 
在这种情况下,输入缓冲区可能包含残留的换行符,导致后续输入被跳过。 
 
为解决这个问题,建议您在输入之前使用getchar()函数清空输入缓冲区。下面是修改后的input函数: 
 
- struct Ym* input(struct Ym *pt,int j)
 
 - {
 
 -         char ch;
 
 -         printf("请问姓名是:");
 
 -         scanf("%s",pt[j].name);
 
 -         printf("请问年龄是:");
 
 -         scanf("%d",&pt[j].age);
 
  
-         while ((ch = getchar()) != '\n' && ch != EOF); // 添加这行以清空输入缓冲区
 
  
-         printf("请问是否接种过疫苗(Y/N):");
 
 -        
 
 -         if((ch = getchar()) == 'Y')
 
 -         {
 
 -                 printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
 
 -                 scanf("%s",pt[j].one_time);
 
 -                
 
 -         }
 
 -         else
 
 -         {
 
 -                 pt[j].one_time[0] = '0';
 
 -                 return;
 
 -         }
 
  
-         while ((ch = getchar()) != '\n' && ch != EOF); // 添加这行以清空输入缓冲区
 
  
-         printf("请问是否接种过第二针疫苗(Y/N):");
 
  
-        
 
 -         if((ch = getchar()) == 'Y')
 
 -         {
 
 -        
 
 -                 printf("请输入第二针疫苗接种的日期(yyyy-mm-dd):");
 
 -                 scanf("%s",pt[j].two_time);
 
 -         }
 
 -         else
 
 -         pt[j].two_time[0] = '0';
 
 -        
 
 -         printf("\n\n");
 
  
-         return;
 
 - }
 
  复制代码 
 
这样修改后,录入第二个人的资料应该就不会出现问题了。请尝试使用这个修改后的代码,并检查是否解决了您遇到的问题。 
 
 
 |   
 
 
 
 |