我的c++乘法表程序有什么问题

rkkpypqq  于 2023-08-03  发布在  其他
关注(0)|答案(4)|浏览(91)

有人能告诉我乘法程序中的问题吗?
代码如下:

#include <stdio.h>

int main()
{
    int a, b, c;
    printf("enter the number of whose table you want");
    scanf("d", &b);
    for (int a = 1; a <= 10; a++)
    {
        c = a * b;
        printf("%d\n", c);
    }
    return 0;
}

字符串
输出显示的是不相关的数字

ux6nzvsh

ux6nzvsh1#

scanf使用字符串格式说明符进行阅读。您可能希望将第5行替换为scanf("%d", &b);

jobtbby3

jobtbby32#

问题出在scanf函数调用上。您没有为整数(%d)传递正确的格式说明符,而是错误地使用了字母“d”。这将导致scanf函数错误地解释输入,并且无法将其正确存储在变量b中。
要解决此问题,您需要在scanf函数中将不正确的格式说明符“d”替换为“%d”。下面是你的程序的修正版本:

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

int main()
{
  printf("Enter the number whose table you want: ");
  int b = 0;
  int status = scanf("%d", &b);
  if (status != 1) {
      printf("Failed to read input\n");
      exit(EXIT_FAILURE);
  }

  for (int a = 1; a <= 10; a++)
  {
      int c = a * b;
      printf("%d\n", c);
  }

  return 0;
}

字符串
通过此更改,程序应按预期工作。

sgtfey8w

sgtfey8w3#

我的乘法表程序有什么问题
关键错误是未在启用所有警告的情况下编译
一个好的编译器会抱怨

scanf("d",&b);

字符串

保存时间并开启所有编译器警告。

polhcujo

polhcujo4#

您忘记了scanf()字符串中的%scanf("d", &b)从标准输入中读取一个字节,并将其与d匹配,如果该字节确实是d,则将其消耗,否则将其推回。如果没有读取字节,scanf()返回EOF,如果读取了字节,scanf()将返回0(成功转换的数量),无论d是否匹配。
还要注意的是,a在函数体中定义了两次,第二次定义隐藏了第一次定义,其作用域仅扩展到for体的末尾。这不会导致程序故障,但可能会造成混乱并容易出错。
你可以很容易地解决这些问题,但还有更多的东西要学习:

  • 始终测试scanf()的返回值以检测无效或丢失的输入;
  • 总是编译您的程序与所有警告启用(即:gcc-Wall-Wextra -Werror)来利用编译器的一致性检查。gccclang都会立即发现问题。

以下是修改后的版本:

#include <stdio.h>

int main(void) {
    int b;

    printf("Enter the number of whose table you want: ");
    if (scanf("%d", &b) != 1) {
        printf("invalid input\n");
        return 1;
    }
    for (int a = 1; a <= 10; a++) {
        int c = a * b;
        printf("%d x %d = %d\n", a, b, c);
    }
    return 0;
}

字符串

相关问题