C语言 紧急措施
程序基本完成,但是最后似乎只输出了最后一行的数据,是不是该用二维数组表示密码?
样例输出:
helloKitty IlOVEcATS
KittyCat 5IkITTY
whoAmi fEB.29$
下面是我的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a0[51],a[51],b[51],c[51];//,a0是第一行email,a是下面的email,b是用户名,c是密码
int N,i,count=0;
gets(a0);
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%s%s%s",b,c,a);
}
if(strcmp(a0,a)==0)//如果email相同,进行运算
{
for(int j=0;j<strlen(c);j++)
{
if(c[j]>='A'&&c[j]<='Z')
c[j]=c[j]+32;
}
for(int j=0;j<strlen(c);j++)
{
if(c[j]>='a'&&c[j]<='z')
c[j]=c[j]-32;//变换大小写
}
count=count+1;
printf("%s %s",b,c);
}
if(count==0)//没有执行上述步骤,说明email都不同
printf("empty");
return 0;
}
下面是运行结果:
问题出在程序只输出了最后一组匹配的用户名和密码,这是因为在循环中,您每次都将新的用户名和密码覆盖了之前的值。要解决这个问题,可以采用以下方法:
使用数组存储匹配的用户名和密码:您可以使用一个数组来存储匹配的用户名和密码。每次匹配成功后,将用户名和密码存储在数组中,并递增数组的索引,以便在之后的操作中能够访问所有匹配项。
遍历数组并输出:在比较完成后,遍历存储匹配用户名和密码的数组,并输出它们。
【以下回答由 GPT 生成】
代码的问题在于,循环中使用的scanf
函数只会读取一次输入,而你希望循环读取多行数据。此外,你还需要在循环外部输出结果。以下是修改后的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char firstEmail[51], email[51], username[51], password[51]; // firstEmail是第一行的电子邮件,email是后面的电子邮件,username是用户名,password是密码
int N, i, count = 0;
gets(firstEmail);
scanf("%d", &N);
fflush(stdin); // 清空输入缓冲区
for (i = 0; i < N; i++)
{
scanf("%s %s %s", username, password, email);
fflush(stdin); // 清空输入缓冲区
if (strcmp(firstEmail, email) == 0) // 如果电子邮件相同,进行大小写转换
{
for (int j = 0; j < strlen(password); j++)
{
if (password[j] >= 'A' && password[j] <= 'Z')
password[j] = password[j] + 32;
}
for (int j = 0; j < strlen(password); j++)
{
if (password[j] >= 'a' && password[j] <= 'z')
password[j] = password[j] - 32; // 变换大小写
}
count = count + 1;
printf("%s %s\n", username, password);
}
}
if (count == 0) // 没有执行上述步骤,说明没有与输入电子邮件相同的行
printf("empty\n");
return 0;
}
这样修改后,程序会正确输出与输入电子邮件相同的行的用户名和转换后的密码,并在没有与输入电子邮件相同的行时输出"empty"。你不需要使用二维数组来表示密码,因为你每次只处理一行数据。