计算C程序中用户输入的数量

时间:2018-09-28 05:07:37

标签: c terminal scanf user-input

printf("Enter number of patients:");
int numberOfInputs = scanf("%d", &patients);

if (numberOfInputs != 1) {
  printf("ERROR: Wrong number of arguments. Please enter one argument d.\n");
}

我要用户输入一个数字作为自变量,但是如果用户不输入任何内容或输入不止一个输入,则想打印一条语句。例如,一旦提示“输入患者数:”,如果用户在不输入任何内容的情况下按回车,则我想打印一条语句。上面的代码是我在过去的几个小时中一直在专门修改的代码,因为该站点上的一些以前的帖子已经提出了建议,但是当我在终端中运行它时,它不起作用。有什么建议么?预先谢谢您,所有建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

如果我对您的问题理解正确,那么当输入的内容不是整数,并且还包括换行符时,您希望输出错误。您可以使用select fs.sale_id,fs.store_type,fs.sale_time , case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time ) when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time ) when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time ) when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end, fs.timezone as new_time from sales fs where to_char( ( case when fs.timezone = 'BST' then dateadd( h, 1, fs.sale_time ) when fs.timezone = 'EDT' then dateadd( h,- 4, fs.sale_time ) when fs.timezone = 'CEST' then dateadd( h, 2, fs.sale_time ) when fs.timezone = 'EEST' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'MSK' then dateadd( h, 3, fs.sale_time ) when fs.timezone = 'WEST' then dateadd( h, 1, fs.sale_time ) else null end),'yyyy-mm-dd') = '2018-09-01' 数组和char说明符来完成此操作。

示例:

%[]

当用户刚刚按下ENTER键时,也会打印错误。

答案 1 :(得分:0)

这看起来超级复杂,但它基本上是分割输入,将其检查为正好一个,然后将其检查为整数(并将其转换)。它在循环中也可以正常工作,并处理空输入。 我敢肯定有解决这个问题的更优雅的方法,这只是一个建议。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

int getNumberOfInput(char* str);
bool isNumber(char* str);

int main()
{
    char str[512];
    while(1)
    {
        printf("Enter text: ");
        fgets(str, 512, stdin);

        int numberOfInput = getNumberOfInput(str);

        if ( numberOfInput == 0 )
            printf("You must give an input\n");
        else if ( numberOfInput > 1 )
            printf("You have to give exactly one input\n");
        else
        {
            if (!isNumber(str))
                printf("The input is not an integer\n");
            else
            {
                int input = atoi(str);
                printf("input: %d\n", input);
            }
        }
    }
    return 0;
}

int getNumberOfInput(char* str)
{
    char* word = strtok(str, " \t\n\v\f\r");
    int counter = 0;
    while(word != NULL)
    {
        ++counter;
        word = strtok(NULL, " \t\n\v\f\r");
    }
    return counter;
}

bool isNumber(char* str)
{
    int i, len = strlen(str);
    for (i=0; i<len; ++i)
        if (!isdigit(str[i]))
            return false;
    return true;
}