【问题标题】:Counting Number Of User Input in C Program在 C 程序中计算用户输入的数量
【发布时间】:2018-09-28 05:07:37
【问题描述】:
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");
}

我要求用户输入一个数字作为参数,但如果用户没有输入任何内容或输入多个输入,我想打印出一条语句。例如,一旦提示“输入患者人数:”,如果用户在没有输入任何内容的情况下点击输入,我想打印一个语句。上面的代码是我在过去几个小时里一直在专门修改它的,正如本网站上一些以前的帖子所建议的那样,但是当我在终端中运行它时,它不起作用。有什么建议么?提前感谢您,非常感谢您的所有建议!

【问题讨论】:

  • 谷歌搜索“argc argv”
  • 这段代码有什么问题?能举个例子吗?
  • 在此处阅读有关 scanf() 的信息 - linux.die.net/man/3/scanf。检查 scanf() 部分的返回类型以了解您的代码行为。
  • 我读对了吗,你真的想读一行用户输入,然后如果它包含多个有效数字,给出错误信息?在这种情况下,您需要先阅读该行,然后对其进行解析。

标签: c terminal scanf user-input


【解决方案1】:

如果我正确理解您的问题,您希望在输入不是整数时打印错误,这也包括换行符。您可以使用char 数组和%[] 说明符来做到这一点。

例子:

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

int main(void)
{
    int patients;
    char str[10];
    printf("Enter number of patients:");
    int numberOfInputs = scanf("%[0-9]", str);

    if (numberOfInputs != 1) {
      printf("ERROR: Wrong number of arguments. Please enter one argument.\n");
    }
    patients = atoi(str); //This is needed to convert the `str` back to an integer      
}

这将在用户按下 ENTER 时打印错误。

【讨论】:

  • 这是我的理解。如何输入两个整数输入?我试过这个 int numberOfInputs = scanf("%[0-9]d %[0-9]d", &patients, &apatients2);它返回 numberOfInputs =1。
  • 对于多个值,您必须使用带有 sscanf 的 char 数组,然后进行相应的转换。
  • 谢谢,这对新行非常有效。如果用户输入多个参数,它似乎不成立,但我会根据您在此处发布的内容进行处理。再次感谢!
  • 不客气。我已经回答了在上述 cmets 之一中有多个输入的情况下要做什么。如果它解决了问题中的问题,您可以接受这个答案。
【解决方案2】:

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

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多