我可以检查一个变量的条件

时间:2016-04-28 13:18:52

标签: c

我正在编写一个程序来扫描一个人的姓名,性别和三个月检查。以下是我想要输入的示例:

Jack m 200 250 300 

如果用户键入“足够”并按Enter键而不填写其他详细信息,我希望循环结束。我尝试使用两个scanf,一个用于单独的字符串,另一个用于其他扫描,但它没有正确循环。这是我的代码:

int main()
{
int i;
char names[SIZE][NAME_LEN] = {0}, gender[SIZE] = {0};
int sales[SIZE][SALES_LEN] = {0};
printf("Enter the name, gender and three month sales for name %d: ", i+1);
for (i=0; i<SIZE; i++){

    if (strcmp(names[i], "Enough") == 0 || strcmp(names[i], "enough") == 0)
        break;

    scanf("%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2]);
}

return 0;
}

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

while(gets(line)) { ... }

如果用户只按下返回键,则gets函数返回NULL并且循环停止。这样用户就不必输入“足够”。

*不要使用gets()函数,因为它不安全(缓冲区溢出的风险)。 我通常将它包装在一个控制输入长度的函数中。

答案 1 :(得分:0)

您的代码被破坏了许多地方:错误排序的语句和错误的读取和解析类型。这可以解决问题:

for (i=0; i<SIZE; i++) {
  char buffer[100]; // A full line
  printf("Enter the name, gender and three month sales for name %d: ", i+1);
  if (fgets(buffer,sizeof buffer,stdin)==NULL // if nothing can be read
      || strncasecmp(buffer,"-stop",5)) {     // or if user typed "-stop" and whatever, an impossible lastname?
    break;
  }
  // try to convert the line into fields of given types...
  if (sscanf(buffer,"%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2])!=5) {
    // do something if conversions failed
  }
}