[英]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.