关于C语言编程的问题,大家看看我这有什么问题,怎么修改。请把修改好的编程发到我邮箱,直接发在这里也行

2024-12-22 20:35:27
推荐回答(2个)
回答1:

//int account_read(char);
void account_read();
//void account_write(char);
void account_write(char*);
函数声明与实现不一致

printf("该账号未注册,登录失败\n");
printf("是否注册该账号,是请输入Y,否请输入N");
scanf("%c",&yes_no);
switch(yes_no)
{
case 'Y':
account_write(account_log);
//account_write(account_log[16]) ; account_log[16]是第十七个元素,不是整个数组
printf("注册成功");
break;

fgets(account_case[i],18,fp); //account_case[i]长度为16,读18个可能会产生越界。建议改成:
fgets(account_case[i],15,fp);

回答2:

看了你的代码觉得,你在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
#include
#include

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]=;

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]); //输出结果

}

同楼上回答。。。虽然在我的机器上没啥问题。