登入帳號密碼輸入取出輸入的值一直有錯
我在在帖子http://bbs.fishc.com/thread-43473-1-1.html]scanf 輸入字串大於數組長度怎不會報錯 牡丹指導下 將程序修該如下#include <stdio.h>
void input(int ,char []);
int main(int argc, const char * argv[])
{
char inpacc;
char inppass;
printf("**********登入**********\n");
printf("請輸入帳號:");
input(5,inpacc);
printf("請輸入密碼:");
input(5,inppass);
printf("帳號:%s\n",inpacc);
printf("密碼:%s\n",inppass);
return 0;
}
void input(int a,char c[])
{
int i;
for(i=0;i<a;++i)
{
c = getchar();
}
for(i=0;i<a;i++)
{
printf("%c",c);
}
printf("\n");
}
圖一 圖二
我需求只是一般登入 在使用者任意輸入帳號長度與密碼長度後按下entet 取出5碼做比對
但是怎像測是都無法 正常取出都會有亂碼好像多出來字元還在 不知道哪有問題請各位前輩給點指導
附上輸出結果
简单的说就是数组溢出,一开始向内存申请了2*5字节的内存,然后分别赋值,如果第二个字符串的长度超过5的话,就会覆盖第一个数组。如果再长的话,就会继续覆盖其他数据,后面的乱码就是超出范围后内存空间里的内容。 看看???!!!!!! 本帖最后由 BaiBai2011 于 2014-2-15 21:54 编辑
#include <stdio.h>
void input(int ,char []);
int main(int argc, const char * argv[])
{
char inpacc= {0};
char inppass={0};
printf("**********登入**********\n");
printf("請輸入帳號:");
input(5,inpacc);
printf("請輸入密碼:");
input(5,inppass);
printf("帳號:%s\n",inpacc);
printf("密碼:%s\n",inppass);
return 0;
}
void input(int a,char *c)
{
int i;
for(i=0;i<a+1;i++)
{
c = getchar();
}
for(i=0;i<a;i++)
{
printf("%c",c);
}
printf("\n");
}
这回对了吧。 BaiBai2011 发表于 2014-2-15 21:55 static/image/common/back.gif
这回对了吧。
還是發生如2樓前輩所講的溢出
當使用者在帳號輸入123456789 密碼輸入abscefgh
若限定只取5字元 應取得 帳號12345 密碼abcde 我稍微解開這問題
但請各位前輩找找毛病建議一下#include <stdio.h>
void input(int ,char []);
int main(int argc, const char * argv[])
{
//取最大5個字元因為最後一位為'\0'所以5+1
char inpacc;
char inppass;
printf("**********登入**********\n");
printf("請輸入帳號:");
input(6,inpacc);
rewind(stdin);//成功清除多出的輸入字元
fflush(stdin);//失敗無法清除多出的輸入字元
printf("請輸入密碼:");
input(6,inppass);//失敗無法清除多出的輸入字元
rewind(stdin);//成功清除多出的輸入字元
fflush(stdin);
printf("帳號:%s",inpacc);
printf("密碼:%s",inppass);
return 0;
}
void input(int a,char *c)
{
int i;
//a-1 因為只取5位最後一位為'/0'
for(i=0;i<a-1;i++)
{
c = getchar();
//這邊判定一下是否輸入是enter 使用者若只輸入一個字元就輸入enter 為達5字元 會無判定將卡住
if(c==10)
{
break;
}
}
} #include <stdio.h>
#define IN_PUST_MAX 500
void input(char []);
int main(int argc, const char * argv[])
{
char inpacc= {0};
char inppass={0};
printf("**********登入**********\n");
printf("請輸入帳號:");
input(inpacc);
printf("請輸入密碼:");
input(inppass);
printf("帳號:%s\n",inpacc);
printf("密碼:%s\n",inppass);
return 0;
}
void input(char *c)
{
int i;
for(i=0;;i++)
{
c = getchar();
if(c == '\n')
{
c = 0;
break;
}
}
}
页:
[1]