C:如何处理没有用户输入的scanf



亲爱的叠花同胞,

如何处理 0 个用户输入?

例如,如果用户输入" "或只是按 ENTER,您如何处理?

#include <stdio.h>
#include <string.h>
int main() {
   printf("> n");
   char string[129];
   int i = 0, length = 0, flag = 0;
   printf("Input a string: ");
   scanf("%128s", string);
   if(strlen(string) != 0) {
      printf("%sn", string);
   } else {
      printf("Please enter at least one argument.");
   }
}

引用C11,第7.21.6.2章,fscanf(),关于%s转换说明符,

s 匹配一系列非空格字符。

以及关于执行转换说明符

的步骤

跳过输入空格字符(由 isspace 函数指定),除非 规范包括[cn说明符。

因此,除非输入流中存在非空格字符,否则它将等待。不会进行匹配

此外,检查 scanf() 和 family 的返回值以确保扫描成功非常重要。

也就是说,至少应该int main(void) int main()以符合标准。

scanf()实现这一目标可能是不可能的,我没有兴趣找出它是否可能,因为这个解决方案

#include <stdio.h> /* For fgets(), fprintf() and printf() */
#include <stdlib.h> /* For EXIT_FAILURE */
#include <ctype.h> /* For isspace() */
int
please_enter_at_least_one_argument()
{
    fprintf(stderr, "Please enter at least one argumentn");
    return EXIT_FAILURE;
}
int
main(void)
{
    char string[130];
    printf("> n");
    printf("Input a string: ");
    if (fgets(string, sizeof(string), stdin) == NULL)
        return please_enter_at_least_one_argument();
    else
    {
        char *pointer;
        pointer = string;
        while (isspace((unsigned char) *pointer) != 0)
            pointer++;
        if (*pointer == '')
            return please_enter_at_least_one_argument();
        printf("%sn", string);
    }
    return 0;
}

解决了问题,简单易懂。

请注意,第一个please_enter_at_least_one_argument()可能不正确,因为如果您按 Ctrl+D或在 Windows 上按 Ctrl+Z)以及发生错误fgets()可能会返回NULL但是要了解如何处理这个问题,您可能应该阅读 男人 fgets(3) .

相关内容

  • 没有找到相关文章

最新更新