所以我的程序需要包含它强制用户输入一个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);
}
答案 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)