标题:请各位高手帮忙,FOR循环只循环了一次
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
strcmp(),全等的才返回零。

授人以渔,不授人以鱼。
2013-07-24 12:19
icanfeelyou
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2013-7-23
得分:0 
回复 21楼 TonyDeng
我知道了,是scanf的回车符留在了缓冲区,导致,直接结束了gets函数
2013-07-24 17:08
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
得分:0 
//=========================我试了一下稍微修改一下gets依然是可以的。


#include <stdio.h>
#include <string.h>
struct student
{
    char name[20],sex,addr[30];
    char tell[11];
    float score[3];
    struct date
    {
        int year,month,day;
    }birthday;
}stu[10];
void main()
{
    int i,j,n=0;
    for(i=0;i<10;i++)
    {
        printf("第%d个人信息的输入:\n",i+1);
        printf("姓名(输入null可以结束输入): ");
        gets(stu.name);
        if(!strcmp(stu.name,"null"))
        {
            n=i;
            break;
        }
        printf("性别(m/f): ");
        stu.sex=getchar();
        strcpy(stu.addr,"tianjin");
        printf("联系电话: ");
        scanf("%s",stu.tell);
        printf("三门成绩: \n");
        for(j=0;j<3;j++)
            scanf("%f",&stu.score[j]);
        printf("出生(yy-mm--dd): ");
        scanf("%d-%d-%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day);
        //======================这里添加上getchar(),接收键盘输入最后的换行符
        //======================在我的理解里面一般scanf()在接收数字之后,需要接一个getchar()
        //======================字符串操作函数和scanf()比较,为什么scanf()在接收数字操作之后,
        //======================需要接一个getchar(),而字符串操作函数不需要,原因不清楚。
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        printf("第%d个人的信息: \n",i+1);
        printf("姓名:%s\t,stu.name");       //==================== 这块双引号的位置错了
        printf("性别: ");
        if(stu.sex=='f')
            printf("女\t");
        else
            printf("男\t");
        printf("家庭住址: %s\t",stu.addr);
        printf("联系电话: %s\t,stu.tell");
        printf("成绩: \t");
        for(j=0;j<3;j++)
            printf("%f\t",stu.score[j]);
        printf("\n");
    }
}[/quote]

否极泰来
2013-07-24 18:50
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
得分:0 
回复 楼主 icanfeelyou
//=========================我试了一下稍微修改一下gets依然是可以的。


#include <stdio.h>
#include <string.h>
struct student
{
    char name[20],sex,addr[30];
    char tell[11];
    float score[3];
    struct date
    {
        int year,month,day;
    }birthday;
}stu[10];
void main()
{
    int i,j,n=0;
    for(i=0;i<10;i++)
    {
        printf("第%d个人信息的输入:\n",i+1);
        printf("姓名(输入null可以结束输入): ");
        gets(stu.name);
        if(!strcmp(stu.name,"null"))
        {
            n=i;
            break;
        }
        printf("性别(m/f): ");
        stu.sex=getchar();
        strcpy(stu.addr,"tianjin");
        printf("联系电话: ");
        scanf("%s",stu.tell);
        printf("三门成绩: \n");
        for(j=0;j<3;j++)
            scanf("%f",&stu.score[j]);
        printf("出生(yy-mm--dd): ");
        scanf("%d-%d-%d",&stu.birthday.year,&stu.birthday.month,&stu.birthday.day);
        //======================这里添加上getchar(),接收键盘输入最后的换行符
        //======================在我的理解里面一般scanf()在接收数字之后,需要接一个getchar()
        //======================字符串操作函数和scanf()比较,为什么scanf()在接收数字操作之后,
        //======================需要接一个getchar(),而字符串操作函数不需要,原因不清楚。
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        printf("第%d个人的信息: \n",i+1);
        printf("姓名:%s\t,stu.name");       //==================== 这块双引号的位置错了
        printf("性别: ");
        if(stu.sex=='f')
            printf("女\t");
        else
            printf("男\t");
        printf("家庭住址: %s\t",stu.addr);
        printf("联系电话: %s\t,stu.tell");
        printf("成绩: \t");
        for(j=0;j<3;j++)
            printf("%f\t",stu.score[j]);
        printf("\n");
    }
}

否极泰来
2013-07-24 18:52
liuleix157
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2013-7-16
得分:0 
程序代码:
#include
#include
struct student
{
    char name[20],sex,addr[30];
    char tell[11];
    float score[3];
    struct date
    {
        int year,month,day;
    }birthday;
}stu[10];
void main()
{
    int i,j,n=0;
    for(i=0;i<10;i++)
    {
        printf("第%d个人信息的输入:\n",i+1);
        printf("姓名(输入null可以结束输入): ");
        getchar();                               //这里添加上getchar()
        gets(stu[i].name);
        if(!strcmp(stu[i].name,"null"))
        {
            n=i;
            break;
        }
        printf("性别(m/f): ");
        stu[i].sex=getchar();
        strcpy(stu[i].addr,"tianjin");
        printf("联系电话: ");
        scanf("%s",stu[i].tell);
        printf("三门成绩: \n");
        for(j=0;j<3;j++)
            scanf("%f",&stu[i].score[j]);
        printf("出生(yy-mm--dd): ");
        scanf("%d-%d-%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
    }
    printf("\n");
    for(i=0;i

2013-07-25 08:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
编写人机交互界面程序,可在每次使用流输入函数(通常我并不建议使用这类函数)之前,用fflush(stdin)清空残留在输入缓冲区中的数据,但这个办法只确保在微软系列的编译器中有效(C标准不要求fflush()函数对stdin有效,但要求对stdout有效),对别的编译器,最好查阅一下它的资料看是否支持。

授人以渔,不授人以鱼。
2013-07-25 11:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-417823-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152791 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved