gpt4 book ai didi

c - 如何扫描值并忽略字符

转载 作者:行者123 更新时间:2023-11-30 15:17:26 24 4
gpt4 key购买 nike

我是 C 的新手,我正在研究一些问题,其中我思考了一个问题,我们需要使用用户输入扫描值。例子1 2 3 45 6 7. 因此,我们自动将这些值扫描到二维数组中。困扰我的一件事是如果用户输入1 2 3 2 3 Josh,我们如何忽略 Josh 而只将值扫描到数组中。我查看了使用 getchar 并使用标志变量,但我无法弄清楚区分整数和字符的难题。/*这是我尝试过的*/

#include <stdio.h>

int main(int argc, char *argv[]) {
int a;
int b;
int A[10];

while (((a = getchar()) != '\n') && (b = 0)) {
if (!(a >= "A" && a <= "Z")) {
scanf("%d", A[b]);
}
b++;
}

}
}

最佳答案

我认为实现你想要的效果的一个好方法是使用 scanf格式为 "%s" ,它将把所有内容读取为字符串,根据空格有效地分割输入。来自手册:

s

Matches a sequence of non-white-space characters; the next pointer must be a pointer to character array that is long enough to hold the input sequence and the terminating null byte ('\0'), which is added automatically. The input string stops at white space or at the maximum field width, whichever occurs first.

要将字符串转换为整数,可以使用 atoi 。来自手册:

The atoi() function converts the initial portion of the string pointed to by nptr to int.

因此,如果它将字符串的初始部分转换为整数,我们就可以用它来识别什么是数字,什么不是数字。




您可以为atoi构建一个简单的“单词检测器”。

使用函数isalpha来自ctype.h你可以这样做:

int isword(char *buffer) 
{
return isalpha(*buffer);
}

并重写你的阅读程序:

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

int isword(char *buffer)
{
return isalpha(*buffer);
}

int main(void)
{
char input[200];
int num;

while (1) {
scanf("%s", input);
if (!strcmp(input, "exit")) break;
if (isword(input)) continue;
num = atoi(input);

printf("Got number: %d\n", num);
}
return 0;
}
<小时/>

您应该记住名称 isword是错误的。此函数不会检测 buffer事实上,是一个词。它仅测试第一个字符,如果这是一个字符,则返回 true。其原因在于我们的基本函数 itoa 的工作方式。如果缓冲区的第一个字符不是数字,它将返回零 - 这不是您想要的。因此,如果您有其他需求,可以使用此函数作为基础

这也是我编写一个单独的函数而不是:

if (!isalpha(input[0])) 
num = itoa(input);
else
continue;

输出(带有您的输入):

$ ./draft
1 2 3 2 3 Josh
Got number: 1
Got number: 2
Got number: 3
Got number: 2
Got number: 3
exit
$

关于分配和&&

while (((a = getchar()) != '\n') && (b = 0))

正如我在评论中所说,这个循环永远不会工作,因为你正在制作 logical conjunction(AND)分配的结果总是返回 zero 。这意味着循环条件将始终评估为

在 C 语言中,赋值返回指定的值。所以,如果你这样做

int a = (b = 10);

a现在将保存值 10 。同样,当你这样做时

something && (b = 0)

你正在有效地做

something && 0

总是评估为 false(如果您还记得 AND 真值表):

p   q    p && q
---------------
0 0 0
0 1 0
1 0 0
1 1 1

关于c - 如何扫描值并忽略字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499943/

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