免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2079 | 回复: 8
打印 上一主题 下一主题

[C] 首行输出应为Cu,但是输出了u [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-25 15:33 |只看该作者 |倒序浏览
本帖最后由 gleerat 于 2012-09-26 11:26 编辑

  1. /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2.   *这段代码把.gjf格式的文件中原子信息拷贝出来,将元素标志存储在数组element中,将原子位置坐标存
  3.   *储在数组cart中
  4.   *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5.   */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>

  9. #define MAX 2000

  10. int main(int argc, char *argv[])
  11. {
  12.     FILE *in;
  13.     float x,y,z, cart[MAX][3];
  14.     char ch, tmp[10], element[MAX][3];
  15.     int count, n=0;

  16.     if((in=fopen(argv[1],"r")) == NULL){
  17.         printf("Can't open file!");
  18.         exit(1);
  19.     }

  20. /*读文件,并正确获取元素标志以及(x,y,z)坐标*/
  21.     while((ch=getc(in)) != EOF)
  22.         for(count=0; fscanf(in, "%s%f%f%f", tmp, &x, &y, &z) == 4; count++){
  23.             element[count][0]=tmp[0];
  24.             element[count][1]=tmp[1];
  25.             element[count][2]='\0';     //字符串数组需要用'\0'来结尾,否则内容会“越界”
  26.             cart[count][0]=x;
  27.             cart[count][1]=y;
  28.             cart[count][2]=z;
  29.         }
  30. /*识别元素标志*/
  31.     for(count=0; element[count][0]!='\0'; count++)
  32.         printf("%2d\t%2s\t%d\t%d\n",count, element[count],
  33.                strlen(element[count]), sizeof(element[count]));
  34.     fclose(in);

  35.     return 0;
  36. }
复制代码
mts@ubuntu-unity:~/Primer_Plus$ ./test g.gjf
0         u        1        3
1        Cu        2        3
2        Cu        2        3
3        Cu        2        3
4        Cu        2        3
5        Cu        2        3
6        Cu        2        3
7        Cu        2        3
8        Cu        2        3
9        Cu        2        3
10        Cu        2        3
11        Cu        2        3
12        Cu        2        3
13        Cu        2        3
14        Cu        2        3
15        Cu        2        3
16         N        1        3
17         H        1        3
18         H        1        3
19        Tv        2        3
20        Tv        2        3
21        Tv        2        3
*** stack smashing detected ***: ./test terminated
已放弃 (核心已转储)
1、首行输出应该为Cu,现在变成了u,怎么修改呢?
2、程序是被异常终止的,这是什么原因,应该如何修改?
谢谢。
这是用到的g.gjf文件
%chk=2-d.chk
  # pbepbe/3-21g/auto

  Title Card Required

  0 2
  Cu 0.00000000 0.00000000 0.00000000
  Cu -1.27152577 2.20234546 0.00000000
  Cu 2.54305000 0.00000000 0.00000000
  Cu 1.27152423 2.20234546 0.00000000
  Cu 0.00000000 0.00000000 6.25786859
  Cu -1.27152577 2.20234546 6.25786859
  Cu 2.54305000 0.00000000 6.25786859
  Cu 1.27152423 2.20234546 6.25786859
  Cu 1.27152474 0.73411515 4.17254272
  Cu -0.00000103 2.93646061 4.17254272
  Cu 3.81457474 0.73411515 4.17254272
  Cu 2.54304897 2.93646061 4.17254272
  Cu -0.00000051 1.46823031 2.08301468
  Cu -1.27152628 3.67057577 2.08301468
  Cu 2.54304949 1.46823031 2.08301468
  Cu 1.27152372 3.67057577 2.08301468
  N 0.52295394 1.19172963 7.72778695
  H 1.32628647 1.22326721 8.37113887
  H -0.28259955 1.24167882 8.36798725
  Tv 5.08610000 0.00000000 0.00000000
  Tv -2.54305154 4.40469092 0.00000000
  Tv 0.00000000 0.00000000 21.01084000

论坛徽章:
0
2 [报告]
发表于 2012-09-25 16:08 |只看该作者
没看懂这段代码干嘛的。
不过sizeof呗就是看下那个东西有多大, 编译期决定的东西,自然和类型的声明直接相关。
strlen就是遇到0就停止,运行期的东西啦,和输入的有关~~
其余没看懂==

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
3 [报告]
发表于 2012-09-25 16:09 |只看该作者
这代码写了个什么意思?

残缺不全的?

论坛徽章:
0
4 [报告]
发表于 2012-09-25 20:33 |只看该作者
回复 2# justmao945


   
可能是拷贝的问题,现在已经改正并注释了。

论坛徽章:
0
5 [报告]
发表于 2012-09-25 20:40 |只看该作者
回复 2# justmao945


   
可能是拷贝的问题,现在已经改正并注释了。

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
6 [报告]
发表于 2012-09-25 21:46 |只看该作者
貌似 sizeof 和 strlen 没有太大关系吧

论坛徽章:
0
7 [报告]
发表于 2012-09-26 08:42 |只看该作者
本帖最后由 gleerat 于 2012-09-26 11:20 编辑

回复 6# cdtits


   
1、首行输出应该为Cu,现在变成了u,怎么修改呢?
2、程序是被异常终止的,这是什么原因,应该如何修改?
谢谢。

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
8 [报告]
发表于 2012-09-26 13:56 |只看该作者
ch=getc(in)

论坛徽章:
0
9 [报告]
发表于 2012-09-26 14:25 |只看该作者
回复 8# yybmsrs


   
什么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP