对特定输入使用scanf

时间:2019-01-19 14:13:22

标签: c scanf

#include<stdio.h>

int main(void)
{
    char z[10];
    scanf("%[aeiou]",z);
    printf("%s",z);
    return 0;
}

我试图输入一个字符串,并希望仅在scanf函数中指定的输出包含a,e,i,o,u。我想尝试仅使用scanf来获取输出。

1 个答案:

答案 0 :(得分:1)

1)避免使用无宽度的字符串格式,例如"%[aeiou]"-容易溢出。

2)检查scanf()的返回值。

为避免出现诸如10之类的限制,请循环读取输入。

int main(void) {
    char z[10];
    while (scanf("%9[aeiou]",z) == 1) {
      printf("%s",z);
    }
    printf("\n");
    return 0;
}

如果代码需要读取xxxaxxxaxxx之类的输入并仅使用aa输出scanf(),则需要做更多的工作。

要清楚,scanf()不是用来实现此目标的最佳工具。

一些未经验证的想法。

int main(void) {
  do {
    int cnt; 
    char z[10];
    while ((cnt = scanf("%9[aeiou]",z)) == 1) {
      printf("%s",z);
    }
    if (cnt == EOF) {
      break;
    }

    // Find the character that stopped scanning
    if ((cnt = scanf("%1[^aeiou]",z)) == 1) {
      if (z[0] == '\n') {
        break;
      }
    } else {
      break;
    }
  }
  printf("\n");
  return 0;
}