繁体   English   中英

接受C中的空字符串

[英]Accepting empty strings in C

我的程序可以接受任意长度或空输入。 但是,如果输入为空(空格或换行符),程序将继续等待输入。 我也尝试过fgets但是如果按下空格/换行符,它仍然会在关闭之前等待更多不是空格/换行符的输入。

简化代码:

#include <stdio.h>
main()
{
    int num;
    scanf("%i",&num);
    printf("%i",num);
}

输入:

363792 

输出:

363792

期望:

输入:

输出:

我是C的新手,我很难完成这项任务。

尝试使用fgets:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
    int n;
    char s[20];

    fgets(s,20,stdin);
    n = atoi(s);

    printf("%i",n);
}

编辑:结果我没有正确编译代码。 所以每当我尝试进行更改时,它只是使用scanf查看原始代码。

我也尝试过fgets但是如果按下空格/换行符,它仍然会在关闭之前等待更多不是空格/换行符的输入。

首先, fgets将在这种情况下工作。 如果您向我们展示了您使用fgets()确切尝试做什么,那么回答这个问题会有很多甚至非常具体。

我尝试使用fgets()执行相同操作,以下是代码段。

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

int main(int argc, char *argv[])
{  
    char string[100];
    printf("Enter a number: ");

    fgets (string, 100, stdin);
    /* Here remove  the trailing new line char; not required unless you are trying to print the string */
    string[strlen(string) - 1] = '\0';

    printf("Num is %d\n", atoi(string));

    return 0;
}

如果没有输入或只输入或空格并输入,则打印的数字将为零,并且fgets()将不会等到您输入有效数字。

另外,请检查为什么不应该使用gets 不要使用gets()

根据scanf()的定义

该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符。

因此,使用scanf()无法获得所需的结果。 因为gets()不安全而且行为不端 如果需要使用atoi()可以使用fgets()获取输入并将其转换为整数。

您可以尝试以下示例代码:

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
    int num;
    char ch[100];
    fgets(ch, sizeof ch, stdin);
    if (strlen(ch)>1&& ch[strlen(ch)-1] == '\n')
    {
        ch[strlen(ch)-1] = '\0';
        num = atoi(ch);
        printf("%i\n", num);
    }
}

您应该逐个读取输入字符,如果读取的字符不是数字则停止读取:

char ch;
while(1)
{
    ch=getchar();
    if(isdigit(ch))
    {
        putchar(ch);
    }
    else
    {
        break;
    }
}

好吧,你不明白scanf()做什么,它去扫描整个输入字符串并查找特殊字符,如%d,%f,%s,直到它没有得到它将等待的字符串。

scanf("%d %d", a, b);

只有当你输入2个整数值时才会完成,如果你按空格它不算作整数值,所以它会忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM