关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了

#include<stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void)
{
srand( (unsigned)time( NULL ) ); //埋下时间种子

char adj[100][12]={"开心的.。。。等一百个词};

char verb[100][8]={"开炮",等一百个词};

char noun[100][12]={"美女",等一百个词};

char pron[12][12]={"妈妈","爸爸","姐姐","杰杰","猫老大","小辉","黄源兄","何俊","spider","孩子他妈","考拉","五月天"};

int a[17],i; //定义随机结构变量数组 a 和 循环结构控制变量 i

for (i=0;i<16;i++)
{a[i]=rand()%100;} //给随机数组中的前16个元素赋0-99的随机值

a[16]=rand()%12; //给随机数组中的最后一个元素赋0-11的随机值

printf("s%是s%\ns%,s%,s%\ns%在s%,s%s%在s%\ns%s%和s%s%在s%\ns%是s%",noun[a[0]][12],adj[a[1]][12],noun[a[2]][12],noun[a[3]]

[12],noun[a[4]][12],pron[a[16]][12],verb[a[5]][8],adj[a[6]][12],noun[a[7]][12],verb[a[8]][8],adj[a[9]][12],adj[a[10]]

[12],adj[a[11]][12],noun[a[12]][12],verb[a[13]][8],noun[a[14]][12],adj[15][12]); //输出结果
}

一编译就提示 错误 难道是字符不匹配?可是老师说汉字可以这样写啊。。用的是VC6
回 我心飞扬1978 能具体说说什么赋值问题么。谢谢了
回 jrl137824675 关于首先和最后 我想说 我那300个词是全部打好了的 但是百度说我过长 不能提交问题 于是我删减了 本以为这样解释下 人脑能读懂 (虽然机器是不懂) 没想到引起大家的歧义 不好意思 那300个词我是按格式打好了的
关于其次 确实是我错了。一直没怎么注意。原来是%s
关于再次 貌似也是我错了。但是那个12不是表示每行的长度么。那样写。。。哦 对了 是引用那一行最后一个元素 是吧?我果然又错了
总结。我修改了 问题依旧 即使是按你的写法 我用VC++6.0编译问题仍然依旧(见图) 请问怎么办捏...马上要交实验作业了 急死我了 最后谢谢下大家 我把分又提了点 麻烦大家了
额。。我试试。

看了你的代码觉得,你在C语言的语法规则上还有待提高啊,在此举出你所给出的代码的若干错误。

首先,你的代码不完整。第9、11、13行要定义三个100行的二维字符数组,如果仅仅是类似char adj[100][12]={"开心的"}的定义;这样adj[1]到adj[99]这99个词都会是空值(ASCII码为0),若用printf()函数把这个范围内的某个字符数组打印,将会什么都看不到。所以,你记得要把这总共300个词补全。

其次,格式化输出的格式有错误。若定义一个字符数组,char ch[20] = "hahaha";将它以字符串的形式输出,用printf("%s",ch);而在以上代码中,%s全都写成了s%。以后不要粗心了啊。

再次,也是以刚刚我举的为例。20位的字符数组ch[20]以字符串形式输出,用到的是printf("%s",ch);注意,这里是ch而不是ch[20]。现在你知道问题出在哪里了吧。若是将二维数组adj[100][12]的第0行字符数组以字符串形式输出,那应该是printf("%s", adj[0]);注意这里是adj[0]而不是adj[0][12],如果你用adj[0][12],逻辑上来讲,不是数组访问越界嘛。

最后,尽量不要在C语言代码中夹杂中文,虽然我知道你是在做说明,那就正规点用//作注释。不要再写成char verb[100][8]={"开炮",等一百个词}; 养成良好的代码书写习惯也是学习C语言很重要的一环。

特别提醒这四个问题,祝你编程方面有所提高。另外说明一声,C语言是认汉字的,你老师说的没错。
以下附上正确代码,在VC6中编译运行通过了的。具体不知道你要什么样的300个单词,这部分就自己补全吧。

#include<stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void)
{
srand( (unsigned)time( NULL ) ); //埋下时间种子

char adj[100][12]={"开心的"}; //补全剩下99个单词

char verb[100][8]={"开炮"}; //补全剩下99个单词

char noun[100][12]={"美女"}; //补全剩下99个单词

char pron[12][12]={"妈妈","爸爸","姐姐","杰杰","猫老大","小辉","黄源兄","何俊","spider","孩子他妈","考拉","五月天"};

int a[17],i; //定义随机结构变量数组 a 和 循环结构控制变量 i

for (i=0;i<16;i++)
{
a[i]=rand()%100;
} //给随机数组中的前16个元素赋0-99的随机值

a[16]=rand()%12; //给随机数组中的最后一个元素赋0-11的随机值

printf("%s是%s\n%s,%s,%s\n%s在%s,%s%s在%s\n%s%s和%s%s在%s\n%s是%s",noun[a[0]],adj[a[1]],noun[a[2]],noun[a[3]],noun[a[4]],pron[a[16]],verb[a[5]],adj[a[6]],noun[a[7]],verb[a[8]],adj[a[9]],adj[a[10]],adj[a[11]],noun[a[12]],verb[a[13]],noun[a[14]],adj[15]); //输出结果

}

同楼上回答。。。虽然在我的机器上没啥问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-19
C语言的变量定义必须在函数的最开头。 你把 srand那句挪到所有的变量定义后面去就行了
第2个回答  2009-06-19
#include<stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void)
{
srand( (unsigned)time( NULL ) ); //埋下时间种子

char adj[100]={"开心的.。。。",等一百个词};

char verb[100]={"开炮",等一百个词};

char noun[100]={"美女",等一百个词};

char pron[12]={"妈妈","爸爸","姐姐","杰杰","猫老大","小辉","黄源兄","何俊","spider","孩子他妈","考拉","五月天"};

int a[17],i; //定义随机结构变量数组 a 和 循环结构控制变量 i

for (i=0;i<16;i++)
{a[i]=rand()%100;} //给随机数组中的前16个元素赋0-99的随机值

a[16]=rand()%12; //给随机数组中的最后一个元素赋0-11的随机值

printf("s%是s%\ns%,s%,s%\ns%在s%,s%s%在s%\ns%s%和s%s%在s%\ns%是s%",noun[a[0]],adj[a[1]],noun[a[2]],noun[a[3]],noun[a[4]],pron[a[16]],verb[a[5]],adj[a[6]],noun[a[7]],verb[a[8]],adj[a[9]],adj[a[10]],adj[a[11]],noun[a[12]],verb[a[13]],noun[a[14]],adj[15]); //输出结果
}

以上这些应该可以了,主要是你定义是多维数组,赋值有问题!~
相似回答