【问题标题】:I am trying to terminate while() loop which is using fgets() function [closed]我正在尝试终止使用 fgets() 函数的 while() 循环[关闭]
【发布时间】:2016-03-31 14:26:12
【问题描述】:
char src[5][100];
size_t counter = 0 ;  // counter for src as it is two dimensional            
printf("Enter the string : ");
while( counter < 5 && (fgets(src[counter],100,stdin) != NULL) && src[counter][0] != '\0' ) {
    counter++; 
}

我正在尝试终止此循环,一种方法是采用某种固定输入,例如退出之类的,我不想使用它。 另一种方法是按 ctrl + D 告诉 EOF ,我也不想这样做。

【问题讨论】:

  • 请告诉我这个问题的正确解决方案,提前谢谢!
  • 我们怎么知道你想做什么?你所说的都是你不想做的。鉴于反规范,很难给出建议。
  • 我想终止这个循环@JohnColeman
  • 将您的计算机扔出窗口将终止循环。您完全没有说明要终止循环的条件。
  • 那肯定会终止我的计算机和我的循环先生,我只想终止这个循环,循环继续进行,假设它必须运行 count

标签: c string loops


【解决方案1】:

fgets 读取一行时,它包括终止行字符\n。如果用户只是按下enter,fgets 将返回字符串"\n",而不是空字符串。换个条件试试

src[counter][0] != '\0' 

通过

src[counter][0] != '\n' 

【讨论】:

    【解决方案2】:

    break; 是你要找的,它可以在任何时候打破循环

    https://msdn.microsoft.com/en-us/library/37zc9d2w.aspx

    另外continue 用于跳过一个循环周期

    https://msdn.microsoft.com/en-us/library/6e3dc2z3.aspx

    【讨论】:

    • 我很确定 break 在那里不起作用
    • @DeveshPratap 为什么不呢?
    • @DeveshPratap 当您在 fgets 函数内时,您是否想终止循环?
    • 你可以在任何循环中加入break(for、while、do while),它会自动结束)你也可以使用return退出整个函数
    • 循环继续进行,假设它必须为 count
    【解决方案3】:

    正如@Vladp 所说,您要么在 while 循环中使用 break,要么将控制变量添加到 continue 条件中。决定或不继续循环的唯一方法是使用 if 语句,并且如果您可以检查例如重复次数、经过的时间,或者如您所说,输入来自 fgets()。

    【讨论】:

    • 循环继续进行,假设它必须为 count
    • 所以你想终止 fgets 阻塞指令。
    • 据我所知没有这样的东西,所以你最好的选择是在不同的线程中运行这段代码
    • 这些愿望(“我想终止那个循环”)是随机出现的,还是有一些 条件 决定了循环是否需要终止?如果是后者——要么更改控制 while 循环的控制表达式,以便此条件自动结束循环,要么在循环体中测试条件然后中断。有两个人提出了这些建议,但您似乎对他们不满意。
    • 我尝试过 exit(),break,但是在使用 fgets() 时,这条语句 src[counter] != '\0' 不起作用,我知道我们使用 break 来终止循环,假设我需要输入 100 行或更多,我试过 {if(src[counter] == '\0') break;} 它不起作用,假设我有一些类似的东西这个 #define STOP 'Q' 并在我的 while 循环中我写了这样的东西 while(...... && str[counter] != STOP),这肯定会起作用,我想用 '\n' 来做字符,如果我按 2 输入,更准确地说,两个 '\n' 字符一起,然后砰!终止@JohnColeman
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2017-09-17
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多