鱼C论坛

 找回密码
 立即注册
查看: 11239|回复: 12

我用c写的程序为什么会出现runtime error(vc++6.0)

[复制链接]
发表于 2013-6-24 14:39:26 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
struct student
{
int num;
char *name;
char sex;
float score;
}boy1,boy2;
main()
{
boy1.num=007;
boy1.name="jane";
printf("please input boy1 sex and score:\n");
scanf("%c%f",&boy1.sex,&boy1.score);
printf("num:%d\nname:%s\n",boy1.num,boy1.name);
}

最佳答案

查看完整内容

scanf("%c%f",&boy1.sex,&boy1.score); 这句话错误! scanf遇到空格或制表符或回车才会把值存入到后面的变量! 所以你应该改成scanf("%c %f",&boy1.sex,&boy1.score); 然后运行程序时候 比如输入M 90.1 不要输入M90.1 {:1_1:}不懂欢迎追问,还有你的程序写的好不规范,记得把悬赏鱼B给我哈!谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 14:39:27 | 显示全部楼层
本帖最后由 zer0 于 2013-6-24 19:16 编辑

scanf("%c%f",&boy1.sex,&boy1.score);
这句话错误!
scanf遇到空格或制表符或回车才会把值存入到后面的变量!
所以你应该改成scanf("%c %f",&boy1.sex,&boy1.score);
然后运行程序时候 比如输入M 90.1   不要输入M90.1
{:1_1:}不懂欢迎追问,还有你的程序写的好不规范,记得把悬赏鱼B给我哈!谢谢了
  1. #include <stdio.h>

  2. struct student
  3. {
  4.      int num;
  5.      char *name;
  6.      char sex;
  7.      float score;
  8. }boy1,boy2;

  9. int main(void)
  10. {
  11.      boy1.num=007;
  12.      boy1.name="jane";
  13.      printf("please input boy1 sex and score:\n");
  14.      scanf("%c %f",&boy1.sex,&boy1.score);
  15.      printf("num:%d\nname:%s\n",boy1.num,boy1.name);
  16.      return 0;
  17. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 16:28:33 | 显示全部楼层
程序没有问题,估计是编译器抽风了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 17:54:57 | 显示全部楼层
boy1.name="jane";
这句话有潜在危险,如果说在内存中有一空闲区域为"abcde..."假设后面都是乱码,那当你在用上面的语句的时候有可能会覆盖这块空闲区域使它变成"janee..."后面全是乱码,发生一些想不到的错误。
建议方案,加一个'\0'。boy1.name="jane\0";以保证输出没问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 19:58:40 | 显示全部楼层
本帖最后由 fanki 于 2013-6-25 19:21 编辑

同学是不是用vc吖?
vc中的c编译器float小数要加f后续,你试试用整数应该没有事了~~
要么把float改double吧~~vc的float应该改了些东西~~

#include <stdio.h>
struct student
{
    int num;
    char *name;
    char sex;
    double score;
} boy1,boy2;

//最好写写返回值
void main()
{
        boy1.num = 7;
        boy1.name = "jane";
        printf("please input boy1 sex and score:\n");
        //scanf( "%c %f", &boy1.sex, &boy1.score );
        scanf( "%c", &boy1.sex );
        scanf( "%g", &boy1.score );
        printf( "num:%d\nname:%s\n", boy1.num, boy1.name );
}

//scanf最好分开写~~有时需要清空输入缓冲区
一起学习~~加油吖~~{:7_175:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 20:03:32 | 显示全部楼层
boy1.name="jane"赋值语句错了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 20:09:27 | 显示全部楼层
还有记得一点~~
boy1.name = "jane";
是可以的,但是不用给
boy2.name 这些指针做scanf操作

1.指针没有初始化好危险,野指针
2.指针得运用要指向一块空间才可以用,如果修改随意修改不定内容的话,一般程序会崩掉。
  boy.name = "jane"; //这个是因为"jane"在代码段的数据,是不能改的数据,const char* 类型的。

这些我觉得都应该注意的。
希望对你有帮助。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-24 20:52:55 | 显示全部楼层
看见楼上都对他说好了,这样是很没劲的!(不是说楼上的童鞋是错的) 我是应该觉得 错误就是要自己去发现, 要留点思考的空间给他, 你们现在让他注意,下次 他犯错就会又来问!我认为这是在害他, 应该要懂得调试 发现错误!!!就会体会到真正的乐趣!!!
你现在对于这些小细节不明白没有关系的! 如果我没猜错的话,楼主应该是在看小甲鱼的C语言教程吧!
或者是其他的刚入门的书籍!
希望你看完后,能在看看这本 <<C Primer Plus>> 到时你就会明白这些细节的重要性! 更能加强巩固C的基础!{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-25 19:22:52 | 显示全部楼层
如果是float的话~~要加f~~昨天说错了~~{:7_175:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-26 11:43:47 | 显示全部楼层
{:7_155:}........
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-26 12:34:11 | 显示全部楼层
朋友,琢磨几天明白了吧?  再给你篇文档看下, http://blog.csdn.net/xiaobo68688/article/details/5680041 也是细节!{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-8 21:41:23 | 显示全部楼层
QQ截图20130708214049.png
没什么问题啊 同意 二楼的
楼主编译器可能抽风了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-9 09:12:29 | 显示全部楼层

支持这个说法
或者直接用char name[10];
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-22 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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