只输入5到10个字符的字符串? C编程

时间:2018-02-15 13:43:13

标签: c string validation

所以我的程序需要包含它强制用户输入一个5-10个字符之间的字符串,并进行验证,所以确保长度是正确的,我有这个到目前为止但完全卡住,任何关于如何验证的建议数据类型只允许输入字符串吗?

char x[10];
int length, i;

for(i=0;i=10;i=i+1){
    printf("Please enter 5-10 Characters\n");
    scanf("%s", &x);

    length = strlen(x);
    if (length < 5){
        printf("Not Long Enough!\n");
    }
    if (length > 10){
        printf("Too Long!\n");
    } 
    while('x' == 'char'){
        if (scanf("%s", &x) == 1){
            return 0;
        }else{
            printf("Not a string, Try again");
            gets(x);
        }

    }
    printf("You inputted: %s\n", x);
}

1 个答案:

答案 0 :(得分:2)

代码中存在各种问题,因此将以标题为主题。

  

只输入5到10个字符的字符串?
  关于如何验证数据类型只允许输入的字符串的任何建议?

使用fgets()读取用户输入的。我会使用辅助函数。

scanf()无法从错误的输入中恢复。不要使用它。

请务必使用足够大的缓冲区来保存读取的10个字符和附加的 null字符@Weather Vane

// Return 1 on success
// Return -1 on EOF
// Return 0 on failure (too long or too short)
// `x` must be at least size `max + 1`

int read_line_min_max(char *x, size_t min, size_t max) {
  if (fgets(x, max + 1, stdin) == NULL) return -1;
  size_t len = strlen(x);
  if (len > 0 && x[len - 1] == '\n') {
    x[--len] = '\0'; // lop off potential \n
  } else {
    // more data to read, but saving not needed, simply consume it
    int ch;
    while ((ch = fgetc(stdin)) != '\n' && ch != EOF) {
      len++;
    }
  }
  return (len >= min) && (len <= max);
}

实施例

#define READ_MIN 5
#define READ_MAX 10
char buffer[READ_MAX + 1];
int result;
do {
  printf("Please enter 5-10 Characters\n");
  result = read_line_min_max(buffer, READ_MIN, READ_MAX);
} while (result == 0);

while('x' == 'char')目前尚不清楚。

也许应该是while(strcmp(x, "char") != 0)