gpt4 book ai didi

C 用户仅输入整数,从 scanf 返回值

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

我正在尝试获取一些用户输入,我想确保他们输入的是整数,如果他们不输入,我会要求他们再次输入(循环直到他们输入正确)。

我发现了很多不同的方法来做到这一点;有些比其他的更复杂。但我发现这种方法似乎有效。

但我真的不明白为什么要在代码中测试它:

scanf("%d%c", &num, &term) != 2

我能理解 scanf 输出匹配和分配成功的项目数,但我不明白为什么它输出 2 如果它是一个整数。

C 中的代码是:

int main(void)
{
int num;
char term;

if (scanf("%d%c", &num, &term) != 2 || term != '\n')
printf("failure\n");
else
printf("valid integer followed by enter key\n");
}

尝试将其放入循环中:

int main(void){

int m, n, dis;
char m_check, n_check, dis_check;

do{
m = 0; n = 0; dis = 0;
m_check = ' '; n_check = ' '; dis_check = ' ';

printf("Please enter number of rows m in the matrix (integer): ");
if(scanf("%d%c", &m, &m_check) !=2 || m_check != '\n')
m_check = 'F';

printf("Please enter number of columns n in the matrix (integer): ");
if(scanf("%d%c", &n, &n_check) !=2 || n_check != '\n')
n_check = 'F';

printf("Should the random numbers come from a uniform or normal distribution?...
Please press 1 for uniform or 2 for normal: ");
if(scanf("%d%c", &dis, &dis_check) !=2 || dis_check != '\n' || dis != 1 || dis !=2)
dis_check = 'F';

}while(m_check == 'F' || n_check == 'F' || dis_check == 'F');

我试过只输入 m = 3、n = 3、dis = 2,然后循环重新开始并要求我输入行数。如果我被要求按 f 或其他东西,它就会开始像疯了似的在 printf 语句上循环 :)

最佳答案

scanf 返回它转换的字段数。您有格式字符串 %d%c;它有:

  1. %d - 第一个字段
  2. %c - 第二个字段

所以 scanf 返回 2。

如果用户输入一个数字,例如123 并按 Enter,您的 num 将等于 123,并且 term将是 \n

如果用户输入的数字末尾有乱码,例如123garbage 并按 Enter,您的 num 将等于 123,即 term将是 garbage\n 将保留在输入缓冲区中。

在这两种情况下,scanf 读取一个 int 和一个 char,因此它返回 2。

另一个例子:用户输入 garbage123。在这种情况下,scanf 将无法读取整数,并返回 0。

因此您的代码会检查两种不同形式的错误输出。

关于C 用户仅输入整数,从 scanf 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282931/

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