此函数每次的输出为:
总和最小的行是1,总和为0。
但是我希望它计算每行的总和,然后显示最小行及其总和。 如果我将此代码用作程序,而不是在函数内部(如本例所示),它将显示正确的结果。
library(dplyr)
a<-c("dog","mouse",NA,"bird")
b<-c(NA,NA,"cat",NA)
coalesce(a,b)
[1] "dog" "mouse" "cat" "bird"
答案 0 :(得分:4)
仔细查看minSum
。在此测试中使用它之前,您无需显式初始化它:
if (sum < minSum)
因此,如果您正在运行调试版本,并且将其初始化为零,那么除非sum <0,否则它将永远不会更改。
请注意,引用未初始化的值是未定义的行为,应不惜一切代价避免这种情况。
尝试将所有数字输入为负。
尝试将其设置为INT_MAX,然后重试。请注意,这是解决该问题的正确方法。
作为另一篇社论,修改数组的尺寸可能不是一个好主意。正如main()
中声明的那样,m
是50 x50。但是您实际上在findRowWithMinimalSum()
中将其视为3 x 3。这不是一个好习惯,我可以保证在将来的某个时候这样做会给您带来麻烦。
最后给自己一个调试器。如果您单步执行findRowWithMinimalSum()
来观察变量随着程序的进展如何变化,这将立即跳出屏幕。
答案 1 :(得分:0)
void findRowWithMinimalSum(int row, int col, int A[50][50])
{
int i,j,sum=0,minSum=0,position,f=0;
for(i=0; i<row; i++){
printf("\nGive the elements of row %d:\n", i+1);
for(j=0; j<col; j++)
scanf("%d", &A[i][j]);
}
for(i=0; i<row; i++){
for(j=0; j<col; j++)
printf("%d ", A[i][j]);
printf("\n");
}
for(i=0; i<row; i++){
sum=0;
for(j=0; j<col; j++){
sum = sum + A[i][j];
}
if(f==0)
{
minSum=sum;
f++;
}
if(sum<minSum){
minSum = sum;
position = i;
}
}
printf("\nThe row with minimal sum is %d whose sum is %d", position+1, minSum);
}
int main(){
int row, column, m[50][50];
//function call
indRowWithMinimalSum(3,3,m);
return 0;
}
答案 2 :(得分:-1)
这将起作用
#include<stdio.h>
void findRowWithMinimalSum(int row, int col, int A[row][col]){
int i,j,sum,minSum,position;
for(i=0; i<row; i++){
printf("\nGive the elements of row %d:\n", i+1);
for(j=0; j<col; j++)
scanf("%d", &A[i][j]);
}
for(i=0; i<row; i++){
for(j=0; j<col; j++)
printf("%d", A[i][j]);
printf("\n");
}
for(i=0; i<row; i++){
sum=0;
for(j=0; j<col; j++){
sum = sum + A[i][j];
}
if(i==0){
minSum = sum;
position = i;
}
else if(sum<minSum){
minSum = sum;
position = i;
}
}
printf("\nThe row with minimal sum is %d whose sum is %d", position+1, minSum);
}
int main(){
int row, column, m[50][50];
//function call
findRowWithMinimalSum(3,3,m);
return 0;
}