gpt4 book ai didi

C中检查输入是否为数字

转载 作者:行者123 更新时间:2023-11-30 19:10:49 27 4
gpt4 key购买 nike

我需要检查输入是否为数字。我的代码看起来像这样:

int input;

while ( scanf(" %s %d", string, &input) != EOF) {

if ( isNotANumber(input) ) {
printf("Not a number"); }

doSomethingElse(input, string);
}

编辑:我需要接受输入并调用函数 doSomethingElse(input) 直到用户输入 EOF。isNotANumber是一个mock函数,我没有这个函数,我想问一下怎么写。

编辑2:变量字符串需要是字符串,变量输入需要是整数。

编辑3:我尝试将我的代码分成:

while (scanf(" %s", string) != EOF) {
if (scanf("%d",&input) != 1) {
printf("not a number");
}
doSomething();
}

但它仍然不适用于“4a”这样的输入。

最佳答案

例如,您可以按如下方式进行更改。

#include <stdio.h>

#define doSomethingElse(input) do{ printf("your input is %d\n", input); }while(0)

int main(void){
int input;
int status;

while ((status = scanf("%d", &input)) != EOF) {
if ( status == 0 ) {
printf("Not a number\n");
while(getchar() != '\n'); //clear input
}
else {
doSomethingElse(input);
}
}
}

但是,这无法检查像 123.456 这样的输入。 (接受123)
因此,建议使用fgets输入并使用strtol检查。

<小时/>

正如已经指出的,像 scanf("%s %d", string, &input) 无法检查数字后的输入

所以,为了方便起见,请检查向后输入。

char string[32], ch;
int input;
int status;


while ((status = scanf("%31s %d%c", string, &input, &ch )) != EOF) {
if ( status == 3 && ch == '\n') {
doSomethingElse(input);
}
else {
printf("Not a number\n");
while(getchar() != '\n'); //clear input
}
}
<小时/>

使用fgetsstrtol的示例
(mystrtoi重新整理了chux的answer。谢谢)

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

#define doSomethingElse(input) do{ printf("your input is %d\n", input); }while(0)

int mystrtoi(const char *str, int *err) {
char *endptr;
*err = errno = 0;
long l = strtol(str, &endptr, 0);
if (errno == ERANGE || *endptr != '\0' || str == endptr) {
*err = 1;
}
// Only needed if sizeof(int) < sizeof(long)
if (l < INT_MIN || l > INT_MAX) {
*err = 1;
}
return (int) l;
}


int main(void){
char line[128];
char string1[32], string2[128];
int num, err;

while (fgets(line, sizeof line, stdin)){
// if(2 != sscanf(line, "%31s %31s", string1, string2)){// or use strtok to split
if(2 != sscanf(line, "%31s %127[^\n]", string1, string2)){
printf("invalid input\n");
continue;
}
num = mystrtoi(string2, &err);
if(err) {
printf("Not a number\n");
}
else {
doSomethingElse(num);
}
}
}

关于C中检查输入是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40947878/

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