Noob在这里提出问题,但我正在教自己C并试图以安全,正确的方式找出用户输入(参考这是在10.6(58-59)的GNU C编程教程中的莫尔斯代码数组练习和15.5.5(107))。
我想要的程序流程是:
问题是如果用户只是输入硬回车,则数组读取功能会从my_array [0]读取并打印。我无法弄清楚如何使返回失败验证。
在main中:
if (get_line (digit_input, sizeof (digit_input), stdin) != NULL ) {
if (validate (digit_input) == 0) {
digit = atoi (digit_input);
printf("\nThe Morse code for %d is: ", digit);
morse(digit);
}
get_line并验证函数:
char *get_line(char *s, size_t n, FILE *f) {
unsigned int last;
char *p = fgets (s, n, f);
if (p != NULL) {
last = (strlen(s) - 1);
if (s[last] == '\n') s[last] = '\0';
}
return p;
}
int validate(char *a) {
unsigned x;
for (x = 0; x < strlen(a); x++)
if ( !isdigit(a[x]) || (a[1] != '\0' )) return -1;
return 0;
}
如何使空白输入无效? (即,如果字符串读取\ n \ 0?)为什么无字符(即\ n)输入变为0并传递给数组读取函数?
感谢大家的帮助!
答案 0 :(得分:1)
如果validate
为0,则strlen()
函数将返回0,这不是您想要的。
答案 1 :(得分:0)
我是否正确理解您希望输入一个数字?
只需明确检查字符串的长度是否正好为1,字符是数字:
int validate(char *a) {
return strlen(a)==1 && isdigit(a[0]) ? 0 : -1
}
答案 2 :(得分:0)
在validate
函数的开头添加以下测试:
if (strlen(a) == 0) return -1;
因此,空白输入将无效。