我正在尝试编写一个c程序。它必须输入两个数组,输入应该是空格分隔。我试图以某种方式消除' \ n'。
#include <stdio.h>
int main()
{
char temp;
int alc[3]={0}, bob[3]={0}, i=0;
//enter alice
do
{
scanf("%d%c", &alc[i], &temp);
i++;
} while(temp != '\n');
i=0;
//enter bob
do
{
scanf("%d%c", &bob[i], &temp);
i++;
} while(temp != '\n');
//print alice
for(i = 0; i < 3 ; i++)
{
printf("%d ", alc[i]);
}
//print bob
for(i = 0; i < 3 ; i++)
{
printf("%d ", bob[i]);
}
return 0;
}
输出./a.out
5 6 7
3 6 10
5 6 7 3 6 10
有更好的方法吗?
答案 0 :(得分:2)
这个想法是将行作为输入,然后解析它以使用strtol
等获取整数。使用fgets
获得的行。然后你将它存储在数组中。现在有两种选择,
如果您获得的元素数量超过数组中的数量,那么当数组已满时您将显示错误。
或者使用动态分配的内存,随着输入的数量的增加而增加。
我担心,使用scanf
直到获得整数是一种选择 - 但这不是一个好主意,scanf
不是解决这个问题的简单方法。
答案 1 :(得分:1)
以下提议的代码:
现在建议的代码:
#include <stdio.h> // scanf(), fprintf(), stderr, printf()
#include <stdlib.h> // exit(), EXIT_FAILURE
#define MAX_NUMS_PER_PERSON 3
int main( void )
{
int alice[ MAX_NUMS_PER_PERSON ]={0};
int bob[ MAX_NUMS_PER_PERSON ]={0};
//enter alice
for( int i=0; i< MAX_NUMS_PER_PERSON; i++ )
{
if( 1 != scanf("%d", &alice[i]) )
{
fprintf( stderr, "failed to input nums for Alice\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
}
//enter bob
for( int i=0; i< MAX_NUMS_PER_PERSON; i++ )
{
if( 1 != scanf("%d", &bob[i]) )
{
fprintf( stderr, "failed to input nums for Bob\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
}
//print alice
for( int i = 0; i < MAX_NUMS_PER_PERSON; i++)
{
printf("%d ", alice[i]);
}
//print bob
for( int i = 0; i < MAX_NUMS_PER_PERSON; i++)
{
printf("%d ", bob[i]);
}
return 0;
}
答案 2 :(得分:0)
根据此答案更改了我的C程序
Putting numbers separated by a space into an array
#include <stdio.h>
#include <ctype.h>
#define ARRAY_SIZE 3
#define BOB_SIZE 5
#define ALICE_SIZE 4
int main()
{
int tmp, i=0;
char follow;
int count;
int a[ALICE_SIZE]={0}, b[BOB_SIZE]={0};
if((ALICE_SIZE < ARRAY_SIZE) || (BOB_SIZE < ARRAY_SIZE))
{
printf("Not sufficient space in array, check the sizes.\n");
return -1;
}
while ((i < ARRAY_SIZE) && (count = scanf("%d%c", &tmp, &follow)) > 0)
{
if ((count == 2 && isspace(follow)) || (count == 1))
{
a[i++] = tmp;
}
else
{
printf ("Bad character detected: %c\n", follow);
break;
}
}
i=0;
while ((i < ARRAY_SIZE) && (count = scanf("%d%c", &tmp, &follow)) > 0)
{
if ((count == 2 && isspace(follow)) || (count == 1))
{
b[i++] = tmp;
}
else
{
printf ("Bad character detected: %c\n", follow);
break;
}
}
for(i = 0; i < ARRAY_SIZE ; i++)
printf("%d ", a[i]);
printf("\n");
for(i = 0; i < ARRAY_SIZE ; i++)
printf("%d ", b[i]);
return 0;
}
尝试在使用 scanf 时尽可能地输入 看起来太费劲了,但需要让它变得强大,并且应对案例和错误。
scanf的更多问题是字符串或%s说明符。因此,在提供输入时,最好习惯于解析fgets,strtol和动态数组。