如何编写代码从输入文件中读取单独的行中的输入,并执行与此代码在C中所做的相同的操作
我写了这段代码:如何编写代码从输入文件中读取单独的行中的输入,并执行与此代码在C中所做的相同的操作,c,C,我写了这段代码: #include <stdio.h> #include <stdlib.h> int main() { char numbers[2001]; char a[1000], b[1000]; int int1, int2, i, n = 0; int sum, difference; fgets(numbers, sizeof(numbers), stdin); for (i = 0; i < 10
#include <stdio.h>
#include <stdlib.h>
int main()
{
char numbers[2001];
char a[1000], b[1000];
int int1, int2, i, n = 0;
int sum, difference;
fgets(numbers, sizeof(numbers), stdin);
for (i = 0; i < 1000; i++)
{
if (numbers[i] != ' ')
{
a[i] = numbers[i];
}
else if (numbers[i] == ' ') {
i += 1;
b[n] = numbers[i];
for (n = 1; n < 1000; n++)
b[n] = numbers[n+i];
}
}
int1=atoi(a);
int2=atoi(b);
sum = int1 + int2;
difference = int1 - int2;
printf("%d\n%d", sum, difference);
return 0;
}
输出:
57
33
147
-75
14
4
159
147
您可以使用
sscanf
从字符串中获取数字,它更简单:
FILE * fp = fopen("input.txt", "r");
if (!fp) {
return -1;
}
int i = 0;
while(fgets(numbers, sizeof(numbers), fp)) {
sscanf(numbers, "%d %d", &a[i], &b[i]);
printf("sum = %d\n", a[i]+b[i]);
printf("diff = %d\n", abs(a[i] - b[i]));
i++;
}
对于较大的数字,应将
a
和b
的类型从char
更改为int
int a[1000], b[100];
因为我的代码中的数字是输入文件的行,它的内容是2个数字,所以您可以减小其大小:
char numbers[256]; // for example.
完整的测试程序:
int main(void) {
char numbers[256];
int a[1000], b[1000];
FILE * fp = fopen("input.txt", "r");
if (!fp) {
return -1;
}
int i = 0;
while(fgets(numbers, sizeof(numbers), fp) && i < 1000) {
sscanf(numbers, "%d %d", &a[i], &b[i]);
i++;
}
for(int j = 0, j < i; j++) {
printf("%d %d\n", a[j], b[j]);
printf("sum = %d\n", a[j]+b[j]);
printf("diff = %d\n", abs(a[j] - b[j]));
}
return 0;
}
a
和b
不再需要是数组。如果将它们都设置为int
,还可以去掉i
,并消除输入文件超过1000行时出现的问题。检查sscanf
的返回值以确保它解析了两个整数可能没有什么坏处。我们可以将a
和b
作为int
类型。可能,OP需要存储“执行其他操作”的值,因此我保留数组a
和b
。我同意您限制行数并检查sscanf
的返回值。我只想举个例子。顺便说一句,谢谢你的评论。非常感谢!但是我希望在所有输入之后输出,而不是在第一次输入之后。我的意思是,输入应该是几行,每一行的输出应该在之后给出。我不明白怎么做所有的值都存储在两个数组a和b中。所以,如果您在输入之后打印输出,那么让我们在while循环之后打印它
int main(void) {
char numbers[256];
int a[1000], b[1000];
FILE * fp = fopen("input.txt", "r");
if (!fp) {
return -1;
}
int i = 0;
while(fgets(numbers, sizeof(numbers), fp) && i < 1000) {
sscanf(numbers, "%d %d", &a[i], &b[i]);
i++;
}
for(int j = 0, j < i; j++) {
printf("%d %d\n", a[j], b[j]);
printf("sum = %d\n", a[j]+b[j]);
printf("diff = %d\n", abs(a[j] - b[j]));
}
return 0;
}
#cat input.txt
12 45
36 111
9 5
153 6
./test
12 45
sum = 57
diff = 33
36 111
sum = 147
diff = 75
9 5
sum = 14
diff = 4
153 6
sum = 159
diff = 147