2013-05-06 56 views
-2

嗨即时尝试做一个while循环,即时通讯新的编程和在线阅读我不能真正得到我的头,我用标志来显示输入的名称匹配名称数据文件,我想这样做,这样以后我知道它不符合再次循环它的整个事情,我不知道如何实现这一点,虽然循环,真的不明白

{ 

    clrscr(); 
    cout << "This Is The Option To Delete A Record\n"; 
    char yesno; 
    char search; 
    char name[21]; 
    int flag = 0; 
    cout << "Enter Employee Name : "; 

    Input(name,20); 

    for (int r=0;r<row;r++) 
    { 

    if(strnicmp(name, emp[r].first_name, strlen(name)) == 0) 
     { 

      flag = 1; 
      clrscr(); 
      cout << "Employee Number - " << emp[r].employee_number << endl; 
      cout << "Name - " << emp[r].first_name << " " << emp[r].surname << endl; 
      cout << "Department Number - " << emp[r].department_number << endl; 
      cout << "Week Ending Date - " << emp[r].weekend << endl; 


      cout << "Delete This Record (Y/N)? : "; 
      Input(yesno); 
      yesno = tolower(yesno); 

      if (yesno == 'y') 
      { 
       emp[r].deleted = true; 
       cout << "Record Has Been Deleted"; 
      } 
      else if (yesno == 'n') 
      { 
       cout << "Record Hasn't Been Deleted"; 
      } 
     } 

    } 

    if (flag == 0) 
    { 
    cout << "There Are No Matching Records" << endl; 
    } 
    pressKey(); 
} 
+6

如果你的问题是关于'while'循环,你不应该发布的代码在某处包含关键字'while'吗? – mah 2013-05-06 14:48:04

+0

并重构你的代码,将部分移动到对你有意义的函数中并调用它们。这样更容易发现错误。 – Trax 2013-05-06 14:49:53

+0

你在想'continue'关键字吗? – 2013-05-06 14:49:53

回答

0

while循环看起来就像实现这个这个:

bool flag=false; 
while(!flag){ 
    ... 
    if(<find a match>) flag=true; 
} 
2

这很简单,所以有一堆你想要的代码继续执行它,而标志是零,所以这只是

int flag = 0; 
while (flag == 0) 
{ 
    // whole bunch of code 
} 

就是这样,只是替换你上面写的代码“一大堆的代码”。

+1

不要忘记通过更改标志 – RSFalcon7 2013-05-06 14:55:23

+0

@ RSFalcon7的值来摆脱循环当然,OP已经在他编写的代码中设置了该标志。 – john 2013-05-06 14:55:57

+0

哈哈...我不知道什么[OP](http://meta.stackexchange.com/questions/79804/whats-stackexchange-ese-for-op)扩展为;) – RSFalcon7 2013-05-06 14:59:03

0

所以基本上,你有一个数据文件。而且,您还接受来自用户的一些数据。 然后您在两组的适当字段之间进行比较。

为什么要在完成整个比较(文件处理)后再重做一遍?

,如果你只是想运行一个无限循环,你可以这样做:

while(true) 
{ 
    //your code 
} 

您可以循环做同样的用也。 forfact for循环和while循环都是相同的,除了语法。即无限循环。

for (int r=0;r<row;r++) 
{ 
     if(r==row-1) 
     { 
      r=0; 
     } 
} 

我猜你想要做的是,一旦一组用户输入的不将文件内容相匹配,要采取另一套,再等相匹配。

所以你不需要无限或总是执行循环。

只要让你的比较模块成为一个单独的函数,它应该接受一组用户输入。您所做的只是接受用户输入并显示结果。并为用户提供重新输入输入的选项。

下面是你想要的简单算法。

int main() 
    { 
     char a='a'; 
     while(a != '~') 
     { 
      TakeUserInput(); 

      if(PerformComparison()) 
      { 
      cout << "Success"; 
      break; 
      } 
     }  
    } 

TakeUserInput()你做所有这些cin <<设置一个全局数组或设置全局变量。您也可以按照您的意愿终止程序cin << a

和PerformComparison()内部,你做你在这里发布你的问题。

+0

即时通讯真正新到C++,我想要做的是如果我输入的东西,不匹配数据文件中的数据,它会再次循环该过程 – user2355072 2013-05-06 15:08:42

+0

所以,这意味着,你想运行整个“带用户输入”和“执行比较“流量再次?那么这就是我在答案中所说的。接受用户输入并将其传递给一个单独的函数进行比较。如果它返回true,请再次输入用户输入 – 2013-05-06 15:11:31

+0

@ user2355072现在查看我的答案 – 2013-05-06 15:18:35

0

假设你了解for循环,我认为你可以很容易地理解while循环,根据forwhile的比较。

看,你使用的for循环:

for (int r=0;r<row;r++){ 
    // do stuff 
} 

这里有3个关键点。

  1. int r=0这是您的初始状态。
  2. r<row这是保持循环运行的条件。
  3. r++这是每次循环结束时发生的情况。

要改写上述语句:

考虑r等于零最初,而r小于row,递增r

现在,我们可以很容易地看到while回路是如何攻打我们:)为了实现这一点,考虑以下while循环示例:

int r=0;  //(1) 
while(r<row){ //(2) 
    //do stuff 
    r++;  //(3) 
} 

看,现在的2个循环做几乎同样的事情。

如果你想要做的基于标记的操作,你也可以喜欢一个无限循环:

while(1==1){ 
    if(some condition) 
     break; 
} 

以及无限for循环:

for(;;){ 
    if(if some condition) 
     break; 
} 

同样,2个循环是几乎一样。