佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 761|回复: 3

奇怪的getline...在C++

[复制链接]
发表于 10-3-2006 10:21 PM | 显示全部楼层 |阅读模式
不知道为什么在function里面就get不到,在int main()
就get 得到,有谁知道为什么吗?

#include<iostream>
#include<string>
#include<cmath>
#include<fstream>
#include<cstdlib>
#include<cstring>
#include<conio.h>
#include<iomanip>
using namespace std;

int password();
int username();
void add();
int view();
int edit();
int print();

int unsuccessful=0;
int main()
{
        char menu;
        cout<<"Welcome To David's Evolution Company"<<endl;
        username();
        cout<<"\nYou Have successful Login Evolution Company"<<endl;
        cout<<"\n\n\nProduct Menu\n------------"<<endl;
        cout<<"A--dd  \t\tNew Product\n";
        cout<<"V--iew \t\tA Product By Code\n";
        cout<<"E--dit \t\tA Product Data\n";
        cout<<"P--rint \tProduct\n";
        cout<<"\nPlease Select Which Function You Want:";
        cin>>menu;
                if(menu=='A'||menu=='a')
                        add();
                else
                        cerr<<"Invalid Input"<<endl;


        return 0;
}

//function to checking username
int username()
{
        int ch=0;
       
        char user_in[50];
        char read[50];
        ifstream read_pass("username.txt");
        if(read_pass.fail())
                cerr<<"ERROR";
a1:        cout<<"Username:";
        fflush(stdout);
        int i=0;
        cin.get(user_in,50);
        while(read_pass.getline(read, 50))
        {
                if(strcmp(user_in,read))
                {
                        ch=0;                       
                }
                else
                {
                        ch=1;
                        break;
                }
        }
        if(ch==1)
        {
                password();
        }
        else
        {
                char confirm;
                cout<<"\nIncorrect Username\n\n";
                ++unsuccessful;
                while(unsuccessful<3){
                        cout<<"Do You Want To Try Again?(Y/N)\n";
                        cin>>confirm;
                        cin.ignore();                //
                        if(confirm=='Y'||confirm=='y')
                                goto a1;//username();
                        else if(confirm=='N'||confirm=='n'){
                                cout<<"Thank You\n";
                                exit(1);}
                        else
                        {
                                cout<<"Why You So Naughty,Never Follow The Instruction,\nNow You Cannot Continue,HAHA,ByeBye"<<endl;
                                exit(1);
                        }
                }
                if(unsuccessful>=3){
                        cerr<<"You Have Been Enter Wrong Username 3 Times\n";
                        cerr<<"Exit Program\n";
                        exit(1);
                }
        }
       
        return 0;
}



//function to checking password
int password()
{
        int ch;
        char confirm;
        char user_in[50];
        char read[50];
        ifstream read_pass("pass.txt");
        if(read_pass.fail())
                cerr<<"ERROR";

b1:cout<<"Password:";
        fflush(stdout);
        int i=0;
        while ((ch = getch()) != EOF && ch != '\n' && ch != '\r') //&&i<10)
        {
                if (ch == '\b' && i > 0)
                {
                        cout<<"\b \b";
                        fflush(stdout);
                        i--;
                        user_in[i] = '\0';
                }
                else if (isalnum(ch))
                {
                        putchar('*');
                        user_in[i++] = (char)ch;
                }
        }

  user_in[i] = '\0';

        read_pass.getline(read, 50);
        if(strcmp(user_in,read)){
                cout<<"\nWrong Password\n";
                ++unsuccessful;
                while(unsuccessful<3){
                        cout<<"Do You Want To Try Again?(Y/N)\n";
                        cin>>confirm;
                        cin.ignore();                //
                        if(confirm=='Y'||confirm=='y')
                                goto b1;//username();
                        else if(confirm=='N'||confirm=='n'){
                                cout<<"Thank You\n";
                                exit(1);}
                        else
                        {
                                cout<<"Who Ask You Not Follow The Instruction,\nNow You Cannot Continue,BYEBYE"<<endl;
                                exit(1);
                        }
                }
                if(unsuccessful>=3){
                        cerr<<"You Have Been Enter Wrong Password 3 Times\n";
                        cerr<<"Exit Program\n";
                        exit(1);
                }
                read_pass.seekg(0);
                read_pass.clear();
       
        }
        return 0;
}

void add()
{

        ofstream output;

        output.open ("product.txt");
        char name[80];
        cout<<"Please Enter Product Name\n";

        cin.getline (name,80);
        cout<<name;
        output<<name;
       


        output.close();
       
}
问题处在add()function,get 不到...
回复

使用道具 举报


ADVERTISEMENT

发表于 11-3-2006 12:29 AM | 显示全部楼层
int main()
{
        char menu;
        cout<<"Welcome To David's Evolution Company"<<endl;
        username();
        cout<<"\nYou Have successful Login Evolution Company"<<endl;
        cout<<"\n\n\nProduct Menu\n------------"<<endl;
        cout<<"A--dd  \t\tNew Product\n";
        cout<<"V--iew \t\tA Product By Code\n";
        cout<<"E--dit \t\tA Product Data\n";
        cout<<"--rint \tProduct\n";
        cout<<"\nPlease Select Which Function You Want:";
        cin>>menu;
        cin.ignore();
                if(menu=='A'||menu=='a')
                        add();
                else
                        cerr<<"Invalid Input"<<endl;


        return 0;
}

这里少了cin.ignore();
另外,username与password那里还有Bug,而且add product的text file不能加超过一种product,需要修改一下

[ 本帖最后由 AdventChildren 于 11-3-2006 12:33 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 11-3-2006 12:46 AM | 显示全部楼层
原帖由 AdventChildren 于 11-3-2006 12:29 AM 发表

这里少了cin.ignore();
另外,username与password那里还有Bug,而且add product的text file不能加超过一种product,需要修改一下


username 和password 有什么bug?小弟看不出....
能多过一种product, 只是第二次输入会覆盖第一次如入的,请问要怎样解决?
谢谢大大的提点...
回复

使用道具 举报

 楼主| 发表于 11-3-2006 12:03 PM | 显示全部楼层
我的getline 问题是
cin>>a;
cin.getline(a,80);

我打david I love u,
他只能getline i love u,

当我只放cin.getline(a,80)
就get不到任何东西,因为没有机会输入...

不知道为什么在int main()
又可以get 到...
真奇怪...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-9-2024 01:00 AM , Processed in 0.131879 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表