听英文歌曲学英语:请大家帮帮我看这段程序出现什么错误了?

来源:百度文库 编辑:高考问答 时间:2024/05/03 07:49:50
为什么我输入相同的符号,却仍然不停循环?
#include <stdio.h>
#include <conio.h>
#define MAXBUFFER 255

void main(void)
{
FILE *fp;
char password[MAXBUFFER],confirm[MAXBUFFER];
int i = -1;
printf("Please Enter the password you want to set\n");

//open the file on disk C:\ for writing
fp = fopen("C:\\Record2","w");

//read input
do {
printf("Password:\n");
do
{
i++;
password[i] = getch();
puts("*");
}
while(i < 254 && password[i] != '\n' && password[i] != '\r');
password[++i] = '\0';

printf(" Confirm:\n");
do
{
i++;
confirm[i] = getch();
puts("*");
}
while(i < 254 && confirm[i] != '\n' && confirm[i] != '\r');
confirm[++i] = '\0';

if (password != confirm)
printf("Different input!Please try Again!\n");

}while (password != confirm);
/*end do while*/

fprintf(fp,"%s\n",password);
fclose(fp);//close the file

printf("***Data has been written to the file'C:\\Record2.txt'.***\n");

printf("\nYour password is: %s\n", password);
getch();

printf("\n");
printf("Please Remember your password!");
}//end main

输入confirm之前i没赋值-1,而是保留刚才输入password的循环结束时的值,confirm当然永远不可能等于password了。

另外,比较字符串相等要用strcmp,不能直接用==,!=。
再另外,在printf("Password:\n"); 后面要加上i=-1,不然如果密码不正确要求重新输入时,i又是保留上次循环结束时的值,又要出错。

#include <stdio.h>
#include <conio.h>
#define MAXBUFFER 255

void main(void)
{
FILE *fp;
char password[MAXBUFFER],confirm[MAXBUFFER];
int i;
printf("Please Enter the password you want to set\n");

//open the file on disk C:\ for writing
fp = fopen("C:\\Record2","w");

//read input
do {
i=-1;
printf("Password:\n");
do
{
i++;
password[i] = getch();
puts("*");
}
while(i < 254 && password[i] != '\n' && password[i] != '\r');
password[++i] = '\0';

i=-1;
printf(" Confirm:\n");
do
{
i++;
confirm[i] = getch();
puts("*");
}
while(i < 254 && confirm[i] != '\n' && confirm[i] != '\r');
confirm[++i] = '\0';

if (strcmp(password , confirm)!=0)
printf("Different input!Please try Again!\n");

}while (password != confirm);
/*end do while*/

fprintf(fp,"%s\n",password);
fclose(fp);//close the file

printf("***Data has been written to the file'C:\\Record2.txt'.***\n");

printf("\nYour password is: %s\n", password);
getch();

printf("\n");
printf("Please Remember your password!");
}//end main

if (password != confirm)
这具有问题,字符串数组的数组名是一个指针,而不是字符串内容,password和confirm指向两个不同的内存区域,即使它们指向的字符串相等,应改为
if(strcmp(password,confirm))
还有接收完password后,i的值没有设为-1,这样confirm的数据是从confirm+i+1开始的,这样password怎么可能会和confirm相等呢?