2016-03-20 23 views
0

DVDを焼くときは、表面にレーザービームを記録するピットに絶えずデータが供給されていなければなりません。ほとんどの主要なDVD書き込みアプリケーションでは、循環バッファを使用してハードディスクからDVDにデータをストリーミングします。最初の部分である「書き込みプロセス」が循環バッファにデータを書き込むと、レーザービームがピットをDVDの表面に燃やすと、「書き込みプロセス」がバッファから読み取られます。バッファー が空になり始めると、アプリケーションはバッファー内の空のスペースをディスクの新しいデータでいっぱいにし続けます。円キューを使用してこの シナリオを実装します。コードは私のプログラムの出力に空白があるのはなぜですか?

enter image description here

を実行したときに私ができる誰ポイントをwhitespcaeを取得していますなぜ私にはわからない

#include<iostream> 
#include<string.h> 
using namespace std; 
#define max 5 
struct queue 
{ 
    char a[max]; 
    int f,r; 
}q; 
void initialize() 
{ 
    q.f=q.r=-1; 
} 
int enqueue(char c) 
{ 
    if(((q.f==0)&&(q.r==max-1)) || (q.r+1==q.f)) 
     return 1; 
    else{ 
    if(q.r==-1) 
    { 
     q.r=0; 
     q.f=0; 
    } 
    else if(q.r==max-1) 
     q.r=0; 
    else 
     q.r++; 
    q.a[q.r]=c; 
    }return 0; 
} 
char dequeue() 
{ 
    if(q.f==-1) 
    { 
     cout<<"Empty queue"; 
     return '\0'; 
    } 
    else 
    { 
     char c = q.a[q.f]; 
     if(q.r==q.f) 
      q.r=q.f=-1; 
     else if(q.f==max-1) 
      q.f=0; 
     else 
      q.f++; 
     return c; 
    } 
} 
void display() 
{ 
    int i; 
    for(i=0;i<max-1;i++) 
     cout<<q.a[i]<<"\t"; 
    cout<<"\nfront: "<<q.f<<"\trear: "<<q.r<<endl; 
} 
int main() 
{ 
    string str,str1; 
    cout<<"Enter a String to write data in DVD\n"; 
    getline(cin,str,'#'); 
    int i,f,choice; 

    for(i=0;str[i]!='\0';i++) 
    { 
     f=enqueue(str[i]); 
     if(f==1) 
     { 
      do{ 
      cout<<"Buffer is:\n"; 
      display(); 
      cout<<"Enter 1 to read and 2 to exit\n"; 
      cin>>choice; 
      if(choice==1) 
      { 
       str1=str1+dequeue(); 
       cout<<"output: "<<str1<<endl; 
      } 
      f=enqueue(str[i]); 
      i++; 
      }while(choice!=2); 
     } 
     if(choice==2) 
      break; 
     f=0; 
    } 
} 

を次のように私はコードを書いた上記の質問については

どこで私が間違っているのですか?

+1

の一つと直接frを初期化することができ、あなたはテキストとして投稿のコードを持っているので、あなたは、やすくするために、あなたのイメージからそれをカットすることができますビュー。 –

+1

標準ライブラリ 'max'を奇妙なエラーメッセージで壊す可能性があるので、' #define max'は使用しないでください。 '(C++ 11で)' constexpr int MAX = 4; 'を使うことは、名前空間を尊重し、より優れたC++スタイルです。 –

+0

私はここで新しいです。私はそれを念頭に置きます – shashank

答えて

1

initializeに電話していないので、q.fq.r-1ではありません。あなたの場合は、0なので、システムは既にa[0]に何かがあると思ってこれを印刷します。それは印刷可能ではないので、その後に\tが表示されます。このため、初期化は、あなたが忘れることのないコンストラクタで行う必要があります。

C++ 11以降では、あなたが

struct queue 
{ 
    char a[max]; 
    int f=-1, r=-1; 
} q; 
+0

ありがとうございます。これは確かに私がやったばかげたミスでした。 :) – shashank

関連する問題