这个C语言程序哪错了?

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:52:49
/*guess.c*/
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

main()
{
int a[4]={0,0,0,0};
int b[4]={0,0,0,0};
int n = 0;
int cA,cB;
int arr[10]={0,1,2,3,4,5,6,7,8,9};
int i,j,k,s,index1,index2,t;

randomize();
for(i=0;i<500;i++)
{
index1=random(10);
index2=random(10);
t=arr[index1];
arr[index1]=arr[index2];
arr[index2]=t;
}
for(k=0;k<=3;k++)
{
a[k]=arr[k];
}
printf("\n\t Guess Numbers!\n\n");
while(1)
{
printf("%d: ",n+1);

b[4]={11,11,11,11];
scanf("%d %d %d %d",&b1,&b2,&b3,&b4);
for(k=0;k<=3;k++)
{
if(b[k]==b[k+1]||b[k]==b[k+2]||b[k]==b[k+3]||b[k]<0 || b[k]>9)
{
for(j=5000;j>=0;j-=100)
{
sound(i);
delay(5000);
nosound();
}
printf("Input error!&#

语法错误:
(1.) scanf("%d %d %d %d",&b1,&b2,&b3,&b4);应该是b[1],b[2],不是b1,b2。而且,应该是b[0]到b[3]而不是b[1]到b[4]。
(2.) b[4]={11,11,11,11];只有在数组初始化的时候才能这样赋值,而且后面的“}”打成“]”了。
(3.) 程序的最后多了一个“}”
还有一个地方我不确定是不是错了,但感觉好像不对。
for(k=0;k<=3;k++)
{
if(b[k]==b[k+1]||b[k]==b[k+2]||b[k]==b[k+3]||b[k]<0 || b[k]>9)
{
。。。。。。
}
}
当运行到k=1时,k+3=4,数组越界,估计会对程序造成影响。
就算没影响,你这段程序用处也不大,你是想防止用户输入的数据有误,可当输入的数据真有误时,程序依然会向后运行。我把你整个输入数据的部分改了一下,你看一下这样行不行:
do
{ printf("\n%d: ",n+1);
scanf("%d %d %d %d",&b[0],&b[1],&b[2],&b[3]);
s=0; /*标志变量,当他为1时,说明数据错误*/
for(i=0;i<4;i++)
{ if(b[i]<0||b[i]>9) s=1;
for(k=0;k<i;k++)
if(b[i]==b[k]) { s=1;break; } /*依次比较,看有没有重复的数字*/
if(s==1) { printf("Data error.\n");break; }
}
} while(s); /*若s==1,则重新输入*/

b[4]={11,11,11,11]改为
b[4]={11,11,11,11}
后面的个回括应该用大括号吧

是不是思路错了?思路错了就没发说