gpt4 book ai didi

c - 处理 int、char、float 的输入

转载 作者:行者123 更新时间:2023-11-30 15:16:13 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序循环要求用户连续输入 float、int 或 char 并将其回显给他们,直到他们输入“q”,然后循环结束。我不明白如何在进入循环之前解析 int、char 或 float。我已经尝试过 if (scanf("%c", ch)) 等对于 float 和 int ,效果很好,但是一旦我添加了循环,它就把我搞乱了。我尝试了几种不同的组合,但仍然没有找到答案。
这是一次向您展示我正在尝试做的事情的尝试:

    char ch;
int num = 0;
float fl = 0;

printf("Enter a value: ");
while(ch != 'q') {
if (scanf("%c", &ch) && !isdigit(ch)) {
printf("You entered a character %c\n", ch);
}
else if (scanf("%d", &num)) }
printf("You entered an integer %d\n", num);
}
else if (scanf("%d", &num)) {
printf("You entered a floating point number %f\n", fl);
}
printf("Enter another value: ");
}
}

这一直在做一些奇怪的事情,我无法查明我的问题。预先感谢您!

最佳答案

你的方法无法实现这一目标。您可以扫描一行并相应地解析它:

char line[128]; /* Create a buffer to store the line */

char ch = 0;
int num;
float fl; /* Variables to store data in */

int r;
size_t n; /* For checking from `sscanf` */

/* A `do...while` loop is best for your case */
do {
printf("Enter a value: ");

if(fgets(line, sizeof(line), stdin) == NULL) /* If scanning a line failed */
{
fputs("`fgets` failed", stderr);
exit(1); /* Exits the program with a return value `1`; Requires `stdlib.h` */
}

line[strcspn(line, "\n")] = '\0'; /* Replace `\n` with `'\0'` */

r = sscanf(buffer, "%d%zn", &num, &n);
if(r == 1 && n == strlen(line)) { /* If true, entered data is an integer; `strlen` requires `string.h` */
printf("You entered an integer %d\n", num);
}
else{
r = sscanf(buffer, "%f%zn", &fl, &n);
if(r == 1 && n == strlen(line)) { /* If true, entered data is a float; `strlen` requires `string.h` */
printf("You entered a floating point number %f\n", fl);
}
else{
if(strlen(line) == 1) /* If true, entered data is a character; `strlen` requires `string.h` */
{
ch = line[0];
printf("You entered a character %c\n", ch);
}
else{ /* Entered data is something else */
printf("You entered \"%s\"\n", line);
}
}
}
}while(c != 'q');

免责声明:我使用手机编写了上述代码,但尚未对其进行测试。

<小时/>

更新(没有测试并用我的手机编写):

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

int main(void)
{

int c = 0;

bool random = false;
bool flag = true;
bool is_float = false, is_char = false, is_number = false;

do{
c = getchar();

if(c == EOF)
break;

if(!random)
{
if(isdigit(c))
{
is_number = true;
}
else if(c == '.')
{
if(is_number)
{
if(is_float)
{
random = true;
}
else
{
is_float = true;
}
}
else if(!is_number && !is_float && !is_char)
{
is_float = true;
}
}
else if(c == '-' && !is_float && !is_number && !is_char);
else if(isalpha(c))
{
if(is_char)
random = true;
else
{
is_char = true;
if(c == 'q')
flag = false;
}
}
else
{
random = true;
}

if((is_char && is_float) || (is_char && is_number))
random = true;

if(c == '\n' && !is_char && !is_float && !is_number)
random = true;
}

if(c == '\n')
{
if(random)
/* puts("You entered a random string!"); */
puts("Invalid input!");
else if(is_float)
puts("You entered a float!");
else if(is_number)
puts("You entered a number!");
else if(is_char)
puts("You entered a character!");
else
puts("Error!");

if(!flag && !is_number && !is_float && !random)
flag = false;
else
flag = true;

is_char = is_float = is_number = random = false;
}
}while(flag);

puts("Done");
return 0;
}

关于c - 处理 int、char、float 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com