gpt4 book ai didi

c - C 中的基本 I/O——程序选择随机整数而不是询问用户

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:33 25 4
gpt4 key购买 nike

我是 C 编程的新手,正在尝试调整从 Python 到 I/O 语法非常不同的 C 的过程。我想请用户输入两个整数,然后将他们输入的两个整数返回给用户,然后将两个整数相乘。我的代码如下:

#include <stdio.h>

int main(void) {

int a,b,c;
printf("Enter a: \n");
scanf("%d", &a);
printf("Enter b: \n");
scanf("%d", &b);

c = a*b;
printf("a = %d, b = %d, a*b = %d", a,b,c);
return 0;
}

程序不允许用户输入一个值,而是自己选择看似随机的整数,而且乘法也不正确。我的输出如下:

Enter a: 
Enter b:
a = 2665720, b = -2147319336, a*b = -76879552

最佳答案

即使问题出在您的 IDE 没有将输入传递给您的程序,观察到的行为也是因为 ab 在您调用 时未初始化printf,以避免您必须验证 scanf 是否成功读取整数。在这里我建议一种方法,它可能不是最好的解决方案,但它会处理无效输入,循环直到收到有效输入。

您必须检查有效输入,因为 scanf 不会在无效输入时初始化传递的参数,更好的方法是将 fgets 函数与 strtol 这样你就可以检查输入数据的有效性

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

int main(void)
{

int a,b,c;
char string[32];
char *endptr;
int valid;

valid = 0;
while (valid == 0)
{
printf("Enter a: ");

if (fgets(string, sizeof string, stdin) == NULL)
return -1;
if (*string == '\n') /* invalid input */
{
printf("Invalid Input\n");
continue;
}

a = strtol(string, &endptr, 10);
if ((*endptr != '\0') && (*endptr != '\n')) /* invalid input */
{
printf("Invalid Input\n");
continue;
}

printf("Enter b: ");
if (fgets(string, sizeof string, stdin) == NULL)
return -1;
if (*string == '\n') /* invalid input */
{
printf("Invalid Input\n");
continue;
}

b = strtol(string, &endptr, 10);
if ((*endptr != '\0') && (*endptr != '\n')) /* invalid input */
{
printf("Invalid Input\n");
continue;
}
valid = 1;
}
c = a * b;

printf("a = %d, b = %d -> a * b = %d\n", a, b, c);
return 0;
}

未初始化的值将包含垃圾,解释您正在观察的行为。

在你的程序中,如果你键入任何无效字符串,scanf 将失败,你将尝试打印未初始化的值,你至少应该检查它是否匹配正确数量的参数,就像这样

if (scanf("%d", &value) != 1)

出了点问题,您应该重新启动程序或中止它。

关于c - C 中的基本 I/O——程序选择随机整数而不是询问用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27674252/

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