gpt4 book ai didi

c - C中检测int的逻辑

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:47 26 4
gpt4 key购买 nike

我将不胜感激。我正在尝试创建这个简单的程序,它反复循环要求用户输入一个 int。如果他输入一个 int,它会退出,但如果他输入其他东西或比 int 更大的东西(例如 4gs4r33),它将再次循环要求输入一个 int。这是我尝试过的方法,但没有用。它说它是一个 int,即使它不是。

#include<stdio.h>

unsigned int findInt();

int main() {

printf("Please input an int.\n");
findInt();

}

unsigned int findInt() {
char input;
long num = 0;
int b = 0;

do {
scanf("%c", &input);

if (isdigit(input)){
num = num*10+input+'0';
b = 1;
}
else if (input == '\n')
b = 1;
else
b = 0;
} while(input != '\n');

if (b == 1)
printf("Great!\n");
else{
printf("Not an int \n");
findInt();
}
return 0;

最佳答案

两种可能的方法。一种是修改您的代码:

b = 1;  // start off with good intentions…
do {
scanf("%c", &input);

if (isdigit(input)){
num = num*10+input -'0'; // *** SUBTRACT '0', don't add it!
}
else if (input != '\n') {
b = 0;
break; // *** break when you find non-digit
}
} while (input != '\n');

两个变化:在计算整数时正确进行数学运算,并修复逻辑(这样当您找到非数字字符时就可以跳出循环)

第二种方法:

char buf[100];
char intAsString[100];
fgets(buf, 100, stdin);
sscanf(buf, "%d", num);
sprintf(intAsString, "%d\n", num);;
if(strcmp(buf, intAsString) == 0 ) {
printf("yay - you entered an integer!\n");
}

我相信你能弄清楚它是如何工作的。

更新一个完整的代码片段,它也解决了“循环逻辑”的问题:你从顶层调用了一次findInt函数,它一直运行直到你得到了整数。注意 - 为了使其正常工作,我一次读取整个输入(而不是一次一个),然后使用 sscanf 一个一个地挑选字符(并手动更新指针) .它有很多优点——其中最重要的是每次调用 findInt 时都从一个新的输入开始,而不是让输入缓冲区的其余部分仍然需要读取(这给了上升到“不,不,不,太棒了!”——因为你会一直阅读错误的输入,直到你到达换行符,然后接受它……)

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

unsigned int findInt();

int main() {
findInt();
}

unsigned int findInt() {
char input;
char buf[100];
char *temp;
long num = 0;
int b = 0;
printf("please enter an int:\n");
fgets(buf, 100, stdin);
temp = buf;
do {
sscanf(temp++, "%c", &input);
if (isdigit(input)){
num = num*10+input-'0';
b = 1;
}
else if (input == '\n')
{
b = 1;
break;
}
else {
b = 0;
break;
}
} while(input != '\n');

if (b == 1)
printf("Great! %d is an integer!\n", num);
else{
printf("Not an int \n");
findInt();
}
return 0;
}

关于c - C中检测int的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345631/

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