首页 > 解决方案 > 对特定输入使用 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.

标签: cscanf

解决方案


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和输出,则需要做更多的工作。aascanf()

明确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;
}

推荐阅读