2017-06-30 9 views
1
#include <iostream> 
    #include <string> 
    #include <sstream> // don't mind this 
    #include <ctime> //don't mind this either 
    using namespace std; 



int main() { 

const string password = "hello"; //password 
char word[100]; //if this were string and I put 2 words in my password it would output "invalid password" twice 

do { 
    cin >> word; 
    cin.getline(word, 100); 

    if (word == password) { //if word is equal to password, break and move on past the loop 
     break; 
    } 
    cout << "Password invalid" << endl; //password not equal, it will move on to this and repeat until password is true 
} while (true); 
cout << "Password valid" << endl; 



return 0; 
} 

私は数ヶ月間C++プログラミングを初めて経験しましたが、今は非常に良いコースを見ています。チュートリアルの1つでは、彼は上記のパスワードプログラムを作成します。私はいくつかのプログラムで遊んだことがあり、 "example password"のように2つの単語を入力すると "無効なパスワード"が2回出力されることに気づいた。私はそれが別の入力としてスペースを認識しているからです。私はいくつかの変更を加えたので、今度は2単語以上を入力すると無効なパスワードが1回だけ出力されます。しかし今、私は助けが必要な別の問題に直面しています。正しいパスワードを入力しようとすると、正しく機能しません。この謎に対する答えは何でしょうか?ヘルプは高く評価され、これは私と他の人がこれをもっと理解し、この問題を将来回避するのに役立ちます。スペースで問題が発生したC++パスワードプログラム

+0

文字列はC++の組み込みデータ型ではないので、#include を使用すると、C++プログラムで文字列クラスを使用します。文字列変数を文字列sとして宣言します。入力を 'cin >> s'としますが、これは最初の空白までの文字列を取ります。空白を含む文字列全体を取得するには、文字列入力関数getlineを文字列sとして使用します。 getline(cin、s); –

+0

いつでもscanf( "%[^ \ n]%* c"、文字列)を使用できます。文字列をスペースで入力する。 –

+1

ありがとうございました!これはうまくいった! – Danthecardboardman

答えて

1

私はすでにあなたの問題を解決したことをうれしく思っていますが、私が以前学習したことについて詳しく説明しましょう。ここでは[^の\ n]

scanf("%[^\n]%*c", string); 

はscanf関数のためのスキャンセット指定され、それはそれまでは標準入力から文字のscanf関数スキャンが改行に達することを意味します。これは基本的にc関数です。

cppの並列処理はgetl​​ine(stream、char *)関数ですが、ほぼすべてのcコードがC++で動作するため、使用することができます。

関連する問題