鱼C论坛

 找回密码
 立即注册
查看: 2150|回复: 18

帮忙解决下,谢谢!

[复制链接]
发表于 2014-9-22 14:16:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
     int r = 3;
    float = ares;
    ares = r*r;
   printf("%d\n", (int)ares); //这里不加(int)为什么会得到0,强制转换了才能输出9.
}


还有一个问题就是结构体定义4个变量,为什么手动输入只能输出2个???
#include <stdio.h>

static struct student
{
        int num;
        char *name,sex;
        float socre;
};

void main()
{
        struct student boy1,boy2;
        printf("Please input num: ");
        scanf("%d",&boy1.num);

        printf("Please input name: ");
        scanf("%c\n",&boy1.name);
       
        printf("Please input sex: ");
        scanf("%c\n",&boy1.sex);
       
       
        printf("Please input socre: ");
        scanf("%lf\n",&boy1.socre);
        printf("%d,%c,%c,%lf\n", boy1.num, boy1.name, boy1.sex, boy1.socre);
       
}
//请详细解答谢谢。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-22 14:25:54 | 显示全部楼层
#include <stdio.h>

struct vegetable
{
        char name[20];
        float price;
};
void main()
{
        int vegcount = 0;
        struct vegetable veg[50];
        printf("请输入蔬菜名:(停止时按回车退出)\n");
        printf("Please input vegetable :(stop 这个后面英文的不会╮(╯﹏╰)╭)");

        while(vegcount < 20 && gets(veg[vegcount].name)! = NULL && veg[vegcount].name[0]! = '\0')
        {
                printf("请输入单价:\n");
                scanf("%f",&veg[vegcount].price);
                ++vegcount;
                while(getchar()! ='\n')continue;
                printf("请输入蔬菜名:(停止时按回车退出)\n");

        }
        if(vegcount > 0)
        {
                printf("-------蔬菜列表-------\n");
                printf("蔬菜名 单价\n");
                for(int i=0; i < vegcount; i++)
                {
                        printf("%s,%.2f\n", veg[i].name, veg[i].price);

                }
                else
                {
                        printf("没有蔬菜录入");
                }
        }
}
错误提示
.c
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(15) : error C2143: syntax error : missing ')' before '!'
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(15) : error C2059: syntax error : '='
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(20) : error C2143: syntax error : missing ')' before '!'
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(20) : error C2059: syntax error : '='
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(24) : error C2059: syntax error : 'if'
H:\C++\Microsoft Visual Studio\MyProjects\结构体1\1.c(38) : error C2059: syntax error : '}'
这个找了很久纠结死了,请各位帮帮忙解决下,在下感激不尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 16:06:03 | 显示全部楼层
破灬王 发表于 2014-9-22 14:25
#include

struct vegetable

!=不等于操作符!和=之间不能有空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 16:22:35 | 显示全部楼层
第一个:因为r*r乘积是int类型,但赋值给ares 时会被转换为float类型,所以在用“%d”去输出的时候就是0;
第二个:有点不明白你为什么要在scanf("\n",xxx)加“\n”,而且char   *name;是指针类型。boy1.name不用加“&”,scanf("%c",boy1.name);至于你说的只输出两个我没看到。我猜想的就是某个scanf读入了'\n',所以该值在输出是是空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 17:51:37 | 显示全部楼层
恋色天空 发表于 2014-9-22 16:06
!=不等于操作符!和=之间不能有空格

你说的!=不等于,我的意思是非不是!=等于。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 18:05:57 | 显示全部楼层
#include <stdio.h>

static struct student
{
        int num;
        char *name;
        char sex;
        double score;

};

void main()
{
        struct student boy1,boy2;
        printf("Please input num: ");
        scanf("%d",&boy1.num);
        printf("Please input name: ");
        scanf("%c",boy1.name);
        printf("Please input sex: ");
        scanf("%c",&boy1.sex);
        printf("Please input score: ");
        scanf("%lf",&boy1.score);

        boy2 = boy1;
        printf("%d,%c,%c,%lf", boy1.num, boy1.name, boy1.sex, boy1.score);


}


输入10后按下回车就成这用哪个了

输入10后按下回车就成这用哪个了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 18:06:48 | 显示全部楼层
恋色天空 发表于 2014-9-22 16:22
第一个:因为r*r乘积是int类型,但赋值给ares 时会被转换为float类型,所以在用“%d”去输出的时候就是0;
...

第二个我重新打了一下 你帮我看下,谢谢咯,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 18:14:20 | 显示全部楼层
破灬王 发表于 2014-9-22 18:06
第二个我重新打了一下 你帮我看下,谢谢咯,

scanf("%c", boy1.name);这句有问题
name成员只是一个指针变量,没有赋值它就没有指向,这样写的话scanf直接把name里面的值当做地址,寻址的时候就崩溃了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 18:28:36 | 显示全部楼层
漩涡鸣人 发表于 2014-9-22 18:14
scanf("%c", boy1.name);这句有问题
name成员只是一个指针变量,没有赋值它就没有指向,这样写的话scanf ...

谢谢,但是问题还是没解决

为什么只能输入2个值

为什么只能输入2个值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 18:33:58 | 显示全部楼层
漩涡鸣人 发表于 2014-9-22 18:14
scanf("%c", boy1.name);这句有问题
name成员只是一个指针变量,没有赋值它就没有指向,这样写的话scanf ...

我给name赋值了boy1.name = "cang";但是还是和上面一样只能输入2个 这是什么问题,请帮我在看下。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 18:55:13 | 显示全部楼层
破灬王 发表于 2014-9-22 18:33
我给name赋值了boy1.name = "cang";但是还是和上面一样只能输入2个 这是什么问题,请帮我在看下。谢谢!

scanf会在缓冲区残留\n,每次scanf之后清一下缓冲区就好了,无数C友都出现这问题,scanf这功能的确不够智能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 21:55:05 | 显示全部楼层
感谢你们!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 21:59:54 | 显示全部楼层
漩涡鸣人 发表于 2014-9-22 18:55
scanf会在缓冲区残留\n,每次scanf之后清一下缓冲区就好了,无数C友都出现这问题,scanf这功能的确不够智 ...

#include <stdio.h>

struct vegetable
{
        char name[20];
        float price;
};
void main()
{
        int vegcount = 0;
        struct vegetable veg[50];
        printf("请输入蔬菜名:(停止时按回车退出)\n");
        printf("Please input vegetable :(stop 这个后面英文的不会╮(╯﹏╰)╭)");

        while(vegcount < 20 && (gets(veg[vegcount].name)!) = NULL && (veg[vegcount].name[0]!) = '\0')
        {
                printf("请输入单价:\n");
                scanf("%f",&veg[vegcount].price);
                ++vegcount;
                while(getchar()! ='\n')continue;
                printf("请输入蔬菜名:(停止时按回车退出)\n");

        }
        if(vegcount > 0)
        {
                printf("-------蔬菜列表-------\n");
                printf("蔬菜名 单价\n");
                for(int i=0; i < vegcount; i++)
                {
                        printf("%s,%.2f\n", veg[i].name, veg[i].price);

                }
                else
                {
                        printf("没有蔬菜录入");
                }
        }
}
请你帮我吧这题目分析下,他这个提示说语法有错误,我找了相关的资料还是搞不懂,请帮我看看!谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 22:57:04 | 显示全部楼层
破灬王 发表于 2014-9-22 21:59
#include

struct vegetable

如果您要用非操作,应该把!放在要操作的值前面
判断是否等于应该是==,修改一下就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-23 09:21:39 | 显示全部楼层
破灬王 发表于 2014-9-22 18:28
谢谢,但是问题还是没解决

我昨天遇到这个问题了,我总结的是:当你输入第一个num后,第一个scanf读入,然后第二个scanf会读入后面的那个'\n',即回车符,所以输出name值是回车符。同理,sex读入格式是‘%c’,所以只会读入一个char类型字符,即读入‘1’;所以score读入的是‘0’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 11:06:16 | 显示全部楼层
恋色天空 发表于 2014-9-23 09:21
我昨天遇到这个问题了,我总结的是:当你输入第一个num后,第一个scanf读入,然后第二个scanf会读入后面 ...

这个已经解决了,谢谢 用fflush(stdin);就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 11:09:14 | 显示全部楼层
漩涡鸣人 发表于 2014-9-22 22:57
如果您要用非操作,应该把!放在要操作的值前面
判断是否等于应该是==,修改一下就好了

我要用非操作,应该吧!放在操作值得前面是放到name里面?有点笨,看不懂。。。。。能把这个改下不?
(vegcount < 20 && gets(veg[vegcount].name)! = NULL && (veg[vegcount].name[0]!) = '\0')

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-23 11:27:39 | 显示全部楼层
破灬王 发表于 2014-9-23 11:06
这个已经解决了,谢谢 用fflush(stdin);就行了

此函数仅适用于部分编译器(如VC6),但是并非所有编译器都要支持这个功能(如gcc3.2)。这是一个对C标准的扩充。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-23 17:41:05 | 显示全部楼层
恋色天空 发表于 2014-9-23 11:27
此函数仅适用于部分编译器(如VC6),但是并非所有编译器都要支持这个功能(如gcc3.2)。这是一个对C标准 ...

恩,学习了,谢谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表