0

我正在从 STDIN 读取一个字符串

    unsigned char arr[200];
    gets(arr);
  // do something with arr

上面的代码将执行一次。

现在我想允许用户使用循环从 STDIN 输入多个字符串。如果用户不想输入更多字符串,还有一些退出选项。

喜欢:

while(CONDITION){
   gets(arr);
   // do something with arr
}

我怎样才能提出这样的条件?

4

4 回答 4

3

不要使用gets(),它很危险,请fgets()改用。

fgets()遇到文件结尾或发生读取错误时返回空指针。读取成功时返回一个非空指针。您可以将此返回值用作条件。

于 2013-11-10T10:02:19.437 回答
1

首先,使用fgets代替gets. 其次,如果您阅读链接引用,fgets您会知道它返回一个非空指针,一切正常,因此您可以将其用作循环条件。

于 2013-11-10T10:02:54.897 回答
0

可能是这样的

while(1) {
 gets(arr);
 if(someExitCondition(arr))
  break;
 // do something with arr
}

ofcouse 使用 fgets 而不是 gets

于 2013-11-10T10:03:09.503 回答
0

你可以这样做,

 while((fgets(arr, sizeof arr, stdin) != NULL))
 {  
     // do something with arr
 }

由于您是第一次使用fgets(),它的语法是,

char * fgets ( char * str, int num, FILE * stream );
  1. strchar *您输入的存储位置。

  2. num是要读取的最大字符数

  3. stream是一个指向FILE结构的指针,它从 fopen 返回。标准输入、标准输出和标准错误。

于 2013-11-10T10:10:50.253 回答