我有一个分配,我想知道为什么当我编译并运行此代码时,library(stringr)
x <- c(
"\nFolsom Field, University of Colorado, Boulder, CO (9/3/72)",
"\nHollywood Palladium, Hollywood, CA (9/9/72)",
"\nThe Spectrum, Philadelphia, PA (5/1/2010) "
)
##String trim is just to cut trailing spaces
states <- str_trim(str_extract(x, "\\s[A-Z]{1,2}\\s"))
states
没有将数据存储在地址中。我知道这一点,因为在下一个scanf("%d", &temp_pin)
语句中,我只是被赋予随机变量。在较早的代码行中,我还有另一个scanf语句可以工作,而我只是为为什么不这样做而感到困惑。非常感谢!
printf("%d", temp_pin)
答案 0 :(得分:1)
如果我可以提出一个建议,那就是将所有整数数组都变成整数。这将解决您所有的问题。但是,如果您的作业需要使用整数数组,请遵循以下代码。
当前,您仅将temp_pin的第一个元素设置为等于用户输入。行scanf(" %d", &temp_pin);
实际上将一个整数存储到temp_pin[0]
中。
由于引脚大小为4,因此需要读取4个独立的整数才能存储在数组中。我建议使用for循环,该循环可以设置temp_pin[0], temp_pin[1], temp_pin[2], temp_pin[3]
从逻辑上讲,我也建议对每个整数进行错误检查,因为整数的大小可以在-32,768到32,767之间。当前具有元素3300,55,12,15
的整数数组将是有效的引脚。
在printf(" %d", temp_pin);
行中给您的值不是随机变量。这是临时引脚的地址。为了打印存储在temp_pin中的值,您需要遍历数组中的每个元素并单独打印。
对于您的比较语句if (temp_pin==pin)
,由于它正在比较地址,因此永远不会得出true。同样,正确的解决方法是同时遍历两个列表并比较每个元素。
答案 1 :(得分:0)
您已将temp_pin
声明为整数的数组,因此&temp_pin
是指向数组的指针,类型为int (*)[4]
。 %d
格式说明符期望使用int *
。
类似地,在打印时,您传递的数组temp_pin
会衰减为指向第一个元素的指针,并且该地址就是要打印的内容。
将temp_pin
的类型和其他声明为数组的变量更改为int
并删除循环。
int pin = 1234;
int temp_pin;
int new_pin;
int temp_new_pin;
...
if (option == 1)
{
printf("\nPlease Enter Your PIN\n");
scanf(" %d", &temp_pin);
printf(" %d", temp_pin);
if (temp_pin==pin)
{
printf("\nYour PIN is correct\n");
}
else
{
printf("\nYour PIN is incorrect\n");
}
}//End If
答案 2 :(得分:0)
您尝试通过一个scanf
调用读取一个数组,但是它确实像c中那样工作。请注意,temp_pin
已经是数组中第一个元素的地址。
线
scanf("%d", temp_pin);
等同于该行
scanf("%d", &(temp_pin[0]));
,它将读取值并将其存储在temp_pin[0]
中。
为了读取整个数组,您需要执行以下操作:
for (int i=0; i<4; i++) scanf("%d", &(temp_pin[i]));
同一个故事进行比较。您无法通过一个==
操作来比较两个数组。表达式temp_pin == pin
比较的地址尽管存储在这些数组中的实际值总是不同的。为了比较两个数组,您需要执行以下操作:
int isEqual = 1; // a flag for whether arrays are equal
for (int i=0; i<4; i++) {
if (temp_pin[i] != pin[i]) {
isEqual = 0;
}
}
if (isEqual) printf("pins are the same\n");
else printf("pins are not the same\n");