我正在为我的算法类做一个项目,我在输入方面遇到了很多麻烦。我正在尝试阅读这样的输入:
6 0 2 3 1 3
5 9 2 1 3
整数需要转到
int num1; // num1 = 6
int num2; // num2 = 5
int array1[100]; // array1 = {0, 2, 3, 1, 3, 0, 0, ...}
int array2[100]; // array2 = {9, 2, 1, 3, 0, 0, ...}
输入将来自标准输入,以文件的形式。所以在终端运行中程序看起来像这样:
cat input.txt | ./a.out
其中input.txt包含两行整数。
到目前为止,这是我的有缺陷的尝试:
while(scanf("%d%c", &temp, &ch) > 1){
if (ch != '\n'){
one[count] = temp;
}
else if (ch == '\n'){
count = 0;
two[count] = temp;
}
one[count] = temp;
count++;
if (ch != ' ')
{
printf("Invalid input. Please do int + space.\n");
return -1;
}
if ((temp >= 100) || (temp <= -100))
{
printf("Input is too big, must be between -100, 100.\n");
return -1;
}
if (one[0] < 1){
printf("Input for n cannot be smaller than one!");
return -1;
}
}
我认为主要问题是我不确定如何处理多行输入。我输入的是一行输入,但多行是让我感到震惊的。
答案 0 :(得分:1)
您可以使用getline
函数获取整行输入,然后迭代该行,使用strtol
函数一次扫描一个数字。
从您问题中的示例我假设您希望两个数组中的所有剩余条目都为零,因此不要忘记将它们归零(手动或使用memset
函数。)。
并且不要忘记缓冲区free()
给你的getline
。
答案 1 :(得分:0)
查看下面的代码。也许它可以帮助你。
通常,如果您知道将输入多少个数字,您可以使用scanf("%d", ...)
逐个读取数字,并在满足预期数量时使用fflush()
清除缓冲区中的任何其他数字。
int main()
{
int it;
int it1 = 0;
int it2 = 0;
int line1[100];
int line2[100];
scanf("%d", &it1); // amount of line 1 numbers
scanf("%d", &it2); // amount of line 2 numbers
it = 0;
do
{
scanf("%d", &line1[it]);
} while (++it < it1);
fflush(stdin); // clear input buffer
it = 0;
do
{
scanf("%d", &line2[it]);
} while (++it < it2);
return 0;
}
答案 2 :(得分:0)
实际上我最终使用了scanf,这是下面的工作代码。它确实有助于阅读其中一些评论,并参考K&amp; R
#include <stdio.h>
#include <string.h>
#define ARRAY_SIZE 100
void shiftArrayBackByOne(int a[]){
for(int i = 1; i <= ARRAY_SIZE; i++){
a[i - 1] = a[i];
}
}
void printArray(int a[], int n){
for(int i = 0; i < n; i++){
printf("%d ", a[i]);
}
putchar('\n');
}
int main(){
int isLineTwo = 0;
int countOne = 0;
int countTwo = 0;
int inputNum;
int num1;
int num2;
int array1[ARRAY_SIZE];
int array2[ARRAY_SIZE];
char ch;
while(scanf("%d%c", &inputNum, &ch) > 0){
//Puts the input into different arrays depeding
//on value of isLineTwo
if (isLineTwo){
array2[countOne] = inputNum;
countOne++;
} else {
array1[countTwo] = inputNum;
countTwo++;
}
//Increment isLineTwo if ch is a 'newline'
if (ch == '\n')
{
isLineTwo++;
}
//Check if user inputs more than 2 lines
if (isLineTwo > 1){
printf("Hey, no more than 2 input lines!\n");
}
}
printArray(array1, countOne);
printArray(array2, countTwo);
num1 = array1[0];
num2 = array2[0];
shiftArrayBackByOne(array1);
shiftArrayBackByOne(array2);
printf("num1 = %d\n", num1);
printf("num2 = %d\n", num2);
printArray(array1, countOne);
printArray(array2, countTwo);
}