DVDを焼くときは、表面にレーザービームを記録するピットに絶えずデータが供給されていなければなりません。ほとんどの主要なDVD書き込みアプリケーションでは、循環バッファを使用してハードディスクからDVDにデータをストリーミングします。最初の部分である「書き込みプロセス」が循環バッファにデータを書き込むと、レーザービームがピットをDVDの表面に燃やすと、「書き込みプロセス」がバッファから読み取られます。バッファー が空になり始めると、アプリケーションはバッファー内の空のスペースをディスクの新しいデータでいっぱいにし続けます。円キューを使用してこの シナリオを実装します。コードは私のプログラムの出力に空白があるのはなぜですか?
を実行したときに私ができる誰ポイントを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; } }
を次のように私はコードを書いた上記の質問については
どこで私が間違っているのですか?
の一つと直接
f
とr
を初期化することができ、あなたはテキストとして投稿のコードを持っているので、あなたは、やすくするために、あなたのイメージからそれをカットすることができますビュー。 –標準ライブラリ 'max'を奇妙なエラーメッセージで壊す可能性があるので、' #define max'は使用しないでください。 '(C++ 11で)' constexpr int MAX = 4; 'を使うことは、名前空間を尊重し、より優れたC++スタイルです。 –
私はここで新しいです。私はそれを念頭に置きます – shashank