我正在尝试创建一个简单的程序,用户必须输入一系列数字,程序应该输出给定数字的正方形和立方体。但是,当我尝试使用数组时,会打印一些我甚至没有输入的随机数。任何帮助将不胜感激,以消除不必要的输入。谢谢。
#include <stdio.h>
int main()
{
char *value;
value = malloc(sizeof(20));
float answer;
int x;
int y;
scanf("%s" , value);
for(x=0; x < 20; x++)
{
y = value[x] - '0';
printf("\nThe square of %d is: %d" , y , y*y);
printf("\nThe cube of %d is: %d \n" , y , y*y*y);
}
return 0;
}
答案 0 :(得分:0)
表达式sizeof(20)
返回int
的大小(文字20
是int
),通常只有4个字节。换句话说,您只为数组分配单个整数。在该单个整数之外的所有访问都将导致未定义的行为。
如果要动态分配内存,则需要分配sizeof(int)
次元素数。或者(我推荐)使用普通数组:
int value[20];
还有另一个问题,因为您只从用户那里读取了一个值。你也应该在循环中阅读。
但是如果你在循环中读取,那么实际上根本没有必要开始一个数组,只读入一个int
变量,然后将其值打印为平方和立方。
所以代码可以简化为
#include <stdio.h>
int main(void)
{
int value;
for (unsigned i = 0; i < 20 && scanf("%d", &value) == 1; ++i)
{
printf("The square of %d is: %d\n", value, value * value);
printf("The cube of %d is: %d\n", value, value * value * value);
}
return 0;
}
乘法时还需要注意溢出。
答案 1 :(得分:0)
您正在使用char输入并对其进行算术运算。
使用此代码,它将为您提供正确的输出。
SetSize
答案 2 :(得分:0)
问题在于您的malloc
声明
sizeof
用于确定参数大小 - 在您的情况下是一个硬编码的整数。生成的数组大小为4,正好是sizeof(20)
而不是20 20*sizeof(int)
的整数。如果您知道所需的大小,最好静态分配数组,请参阅下面的代码:
#include <stdio.h>
int main()
{
// This line sets value to an array of 20 ints
int value[20];
// Another, less favorable option, but still works:
// char *value = malloc(20 * sizeof(int))
float answer;
int x;
int y;
scanf("%s" , value);
for(x=0; x < 20; x++)
{
y = value[x] - '0';
printf("\nThe square of %d is: %d" , y , y*y);
printf("\nThe cube of %d is: %d \n" , y , y*y*y);
}
return 0;
}