如何在C中求和?

时间:2018-08-11 20:38:32

标签: c arrays

如何制作程序以从输入中读取元素,例如:

  

1 3

然后给我一个总结:

  

4

#include <stdio.h>

int main(void){
    char x[3];
    scanf(" %c",&x);
    printf("%d\n",x[0]+x[2]);
}

6 个答案:

答案 0 :(得分:2)

在您的方法中,您似乎读了一个字符串并将该字符串的多个位置视为数字。除了在实施此方法方面存在多个错误的事实外,主要的事实实际上是您采用了错误的方法。缺点(不是全部,只是一些)是:您只考虑精确一位的数字;您假定用户输入已精确地映射到数组,并且在感兴趣的数字之间恰好有一个“空白”位置(当您使用硬编码索引x[0]+x[2]0访问2时);您只能将两个“数字”相加; ...

我宁愿在一个循环中扫描整数值(即使用%d和数据类型int),直到输入的不是有效数字。这样可以解决上述所有问题:

int main() {

    int sum=0;
    int num=0;
    printf("type in numbers to be summed up (type a non-number to exit):\n");
    while (scanf("%d",&num)==1) {
        sum += num;
    }
    printf("sum: %d\n",sum);
}

输入/输出:

type in numbers to be summed up (type a non-number to exit):
10 20 30 x
sum: 60

答案 1 :(得分:1)

这里缺少一些东西。

一方面,您仅使用%c读取一个字符。您将其存储在&x中,尽管令人困惑,但从技术上讲是合法的:由于它是3 char大小的元素序列在内存中,因此&x是有效的字符地址。但是,x[1]x[2]尚未初始化;您没有在任何地方设置它们。

第二,您没有将其转换为整数值,因此它仍然具有字符“ 1”而不是小数1的值。'1' + '1'(请注意单引号)将得出49 + 49(注意缺少引号),49是与字符'1'等效的ascii,与十进制值1截然不同。

最后,您只求和了第一个和第三个字符(未初始化的第一个字符具有未知值,肯定不是您输入的值)。第二个字符不是最终结果的一部分。

如果您想阅读3 integers,则应扫描int,而不是字符,并应扫描希望读取的数字。这样您就可以正确读取9以上的数字。

但是也许您要做想要一次扫描一位数字;在这种情况下,您肯定希望将每个数字 character 转换为等价的 integer 。由于数字09是连续的,并且按升序排列,因此您可以从字符中简单减去'0'以获得其十进制等效值('1' - '0' == 1,{{1 }}等),但是要确保此功能有效,您必须确保自己确实阅读了数字,而不仅仅是任何'9'-'0'==9。您可以通过验证其值在char和''0''之间(包括首尾)来实现。

无论您希望对整数或数字求和,都将要确保在计算最终总和之前,先读取要求和的每个值。

鉴于您的用例,在循环中继续扫描整数直到您用完输入流中的整数可能更有意义。您实际上并不需要分别存储它们。您可以一次读取一个int并将其添加到运行总计中。

将它们放在一起,最终可能会得到这样的结果。采取这些想法并实现您的总和,您将拥有想要的角色。

9

我这样跑:

#include <stdio.h>
int main() {
  char c; // we'll store our input here as we go
  while( scanf(" %c", &c) == 1 ) { //one thing matched
    if(c >= '0' && c <= '9'){ // it's a digit
      printf("Read %c, decimal value of digit is %d\n", c, (int)(c-'0') );
    }else {
      printf("Invalid digit %c\n", c);
    }
  }
}

按如下所述更改为$ gcc -o t t.c && echo '1 2 3 4 5' | ./t Read 1, decimal value of digit is 1 Read 2, decimal value of digit is 2 Read 3, decimal value of digit is 3 Read 4, decimal value of digit is 4 Read 5, decimal value of digit is 5 来读取多位整数,并相应地更改代码。

scanf("%d")

该方法可以读取最大{/ {1}}的最小整数表示,包括多个数字甚至是负数:

#include <stdio.h>
int main() {
  int c; // we'll store our input here as we go
  while( scanf(" %d", &c) == 1 ) { //one thing matched
    printf("Read %d; wasn't that easy?\n", c);
  }
}


$ gcc -o t2 t2.c && echo '1 2 3 4 5' | ./t2
Read 1; wasn't that easy?
Read 2; wasn't that easy?
Read 3; wasn't that easy?
Read 4; wasn't that easy?
Read 5; wasn't that easy?

答案 2 :(得分:0)

您可以尝试:

int n1;
int n2;
scanf("%d %d", &n1, &n2);

int sum = n1 + n2;
printf("%d\n", sum);

如果您想将两个以上的数字加在一起,可以尝试:

printf("Enter how many numbers you want to add:\n");
int n;
scanf("%d", &n);

int sum;
for (int i = 0; i < n; i++) {
    int in;
    scanf("%d", &in);
    sum += in;
}

printf("%d\n", sum);

注意:

首先,答案的标题中包含C ++,所以我用C ++进行了答复:

如果您不介意使用cincout,则可以尝试:

int n1;
int n2;
cin >> n1 >> n2;
cout << n1 + n2;

答案 3 :(得分:0)

使用n个整数运行该程序将通过从argv [1]迭代到argv [n]返回它们的总和。 argv [0]是程序的名称。

示例:

./ sum 1 3返回4

代码:

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


int main(int argc, char *argv[])
{
    int i;
    int sum;

    if (argc > 1)
    {
        for (i = 1; i < argc; i++)
        {
        sum += (int)strtol(argv[i], NULL, 10);
        }

        printf("%d\n", sum);

    }
    else
    {
        fprintf(stderr,"Invalid number of arguments\n");
        return(EXIT_FAILURE);
    }
    return(EXIT_SUCCESS);
}

答案 4 :(得分:0)

您可以使用数组和循环。这是一种简单的方法。

#include<stdio.h>
#include<conio.h>
void main()
{
int sum=0, allocation[5],i,num;
printf("enter the number of elements");
scanf("%d",&num); // how many numbers are there??
printf("Enter the elements");
for(i=0;i<num;i++)
{
 scanf("%d",&allocation[i]);  //allocate the elements in the array say 3,4,5
 sum=sum+allocation[i];      
//0+3, sum=3
//3+4, sum=7
//7+5, sum=11
}
printf("Sum= %d",sum);  //print Sum=11
getch();
}

答案 5 :(得分:-1)

#include <stdio.h>
int main () {

    int num1,num2;

    printf("Enter two numbers");

    scanf("%d %d", &num1 &num2);

    printf("Sum is = %d", num1+num2);

    return 0;
}