如何制作程序以从输入中读取元素,例如:
1 3
然后给我一个总结:
4
#include <stdio.h>
int main(void){
char x[3];
scanf(" %c",&x);
printf("%d\n",x[0]+x[2]);
}
答案 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 。由于数字0
至9
是连续的,并且按升序排列,因此您可以从字符中简单减去'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 ++进行了答复:
如果您不介意使用cin
和cout
,则可以尝试:
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;
}