第二个scanf识别关键字以退出整数迭代? C

时间:2015-04-26 20:06:37

标签: c scanf

尝试接受由空格或行分隔的整数,直到用户键入关键字" end"此时程序将查找操作符(+ - * /)以对输入的整数执行操作。

我一直在指针和整数之间进行比较"编译时警告哪些有意义,但我不确定正确的修复方法。有一个注释代码中的问题是。

有人可以帮助我使用第二个scanf的正确语法退出迭代并继续操作员输入。

感谢您的帮助! PS:是的,我知道有更简单的方法来编写程序,但我对C很新,并且正在使用它作为另一个练习的机会。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main (void) {
   int iarray[100];
   char stop[100];
   int c = 0;
   char action[100];
   while (scanf("%d", &iarray[c]) == 1) {
         if (scanf("%s", stop) == "end")      // the issue is here
            break;
         else
             continue;
      c++;
   }
   if (c == 0) {
      printf("error");
      return 1;
   }
   scanf("%s", action);
return 0;
}

1 个答案:

答案 0 :(得分:3)

第一个问题:尝试读取字符串,然后使用sscanf将字符串转换为整数,如果它不等于“end”。 (按strcmp而不是==进行比较。)

第二个问题:当你读数字时,你永远不会达到c ++。继续让它跳过它。

例如,你可以这样做:

char temp[100]
while (scanf("%s", temp) == 1) {
     if (0 == strcmp(temp,"end")) // return 0 when both equal... 
        break;
     else{
        if( 1 == sscanf(temp,"%d",&iarray[c]))
           c++; //number successfully read, increment counter. 
        else
           break; //not end nor number...  
     }
}