【发布时间】:2019-04-23 14:18:17
【问题描述】:
我开发了一个 C 程序来进行整数相加,但我遇到的问题是它需要通过输入文本(非交互式)从标准输入获取输入。但是,经过测试,当它应该适用于多个输入时,我只能让它适用于单行输入,假设这个示例输入都在一个输入文件中((第 1 行)123+456=(第 2 行)999999999+1 = )。
我认为它与 EOF 有关,它应该经历并重复直到完成。我尝试将 EOF 放在第一个 while 循环中,但输出与应有的非常不同。输入格式必须保持不变并且不能更改。无论如何我可以让它在输入文件结束之前执行操作吗?
#include<stdio.h>
#include<stdbool.h>
int main() {
char c;
char a[100], b[100], array[101];
int n = 0;
//It should scan through everyrthing then exit and it think start arround HERE
while ((c = (char) getchar()) != '=') {
array[n] = c;
putchar(c);
n++;
}
printf("=\n");
array[n] = '\0';
int n1 = 0, n2 = -1;
while (n1 + n2 < n) { //Splits the array into two separate char arrays
if (array[n1] == '+') {
n2 = 0;
n1 += 1;
}
if (n2 == -1) {
a[n1] = array[n1];
n1++;
} else {
b[n2] = array[n1 + n2];
n2++;
}
}
n1--;
a[n1] = b[n2] = '\0';
int i = 0, z = 0, p = 0;
char array2[101];
bool val = false;
while (n1 > 0 || n2 > 0) { //Addition Calculation
int x = 0, y = 0;
if (n1 > 0)
x = a[n1 - 1] - '0';
if (n2 > 0)
y = b[n2 - 1] - '0';
z = x + y;
if (val)
z = z + p;
if (z > 9) {
p = z % 10;
array2[i++] = (char) (p + '0');
p = z / 10;
val = true;
} else {
array2[i++] = (char) (z + '0');
val = false;
}
n1--;
n2--;
}
if (val) {
array2[i++] = (char) (p + '0');
array2[i] = '\0';
}
for (n = i - 1; n >= 0; n--) { //Print Result
printf("%c", array2[n]);
}
printf("\n");
return 0;
}
【问题讨论】:
-
当你想要
ints 时,为什么不使用scanf()阅读ints?while ((c = (char) getchar()) != '=')是您的代码只处理第一行的原因。 -
我需要找到一种方法来拆分输入和退出之间的字符,一旦它达到 =,除非它可以使用 scanf 完成并且仍然可以正常工作。 getchar 似乎更容易,因为它逐个字符地读取。
-
您必须摆脱首先需要阅读单个字符的误解。你要数字吗?阅读数字。
标签: c