我正在尝试制作一个使用MACROS和数组的程序。它要求输入1-10的任何等级并创建一个图表。 评级回应 10 25 9 50 8 100 ...... -1239 0 等。 我遇到了大量的语法错误,无法弄清楚如何让这些代码完全运行。吼叫是我想出来的。有没有人知道我能解决什么,使用我开始的这个通用代码的想法使输出正确。谢谢!
$ cat file1
a
b
c
$ cat file2
foo
bar
$ cat file1 | cat file2 -
foo
bar
a
b
c
答案 0 :(得分:3)
宏定义不是语句,通常最后不会有分号。
在完成任何其他语法检查之前,C语言中的宏会逐字扩展。所以当你定义
时#define MAX_RESPONDANTS 20;
#define MIN_RESPONSE_VALUE 0;
#define MAX_RESPONSE_VALUE 10;
#define TERMINATOR -1;
然后写
printf ("...", MIN_RESPONSE_VALUE, MAX_RESPONSE_VALUE, TERMINATOR);
它被扩展为
printf ("...", 0;, 10;, -1;);
我认为你会同意的是语法无效。
因此,您应该从宏定义中删除分号:
#define MAX_RESPONDANTS 20
(顺便说一下,正确的拼写是“受访者”。)
我猜你可能已经在线路上遇到了类似的错误
const int RESPONSE_VALUES = MAX_RESPONSE_VALUE - MIN_RESPONSE_VALUE
并通过删除末尾的分号来“修复”它。但这已经扩展为
const int RESPONSE_VALUES = 10; - 0;
MIN_RESPONSE_VALUE
实际上并未用于计算分配给RESPONSE_VALUES
的值;它出现在它自己的声明中,其中说“计算0的负数,然后不用它做任何事情。”
奖金错误:
ratingCounters
的大小为RESPONSE_VALUES
,在本例中为10,但您在其中存储MAX_RESPONDANTS
个值,即20。
在行printf("response is","%d" ,RESPONSE_VALUES);
中,前两个参数应该是单个字符串。如上所述,该行只会打印response is
。
在else if (value = TERMINATOR)
行中,您几乎肯定是==
。
答案 1 :(得分:0)
如问题评论中所述,发布的代码存在很多问题。
以下代码纠正了这些问题和其他几个问题
//#include <stdlib.h> -- not needed
#include <stdio.h> // printf()
// notice no trailing `;` and surrounded by parens
#define MAX_RESPONDANTS (20)
#define MIN_RESPONSE_VALUE (0)
#define MAX_RESPONSE_VALUE (10)
#define TERMINATOR (-1)
int main(void)
{
// -- not needed statement
//const int RESPONSE_VALUES = MAX_RESPONSE_VALUE - MIN_RESPONSE_VALUE
int value;
int loopCount;
// enter rating 1-10
int ratingCounters[MAX_RESPONDANTS] = { 0 };
// loopCount, responses[MAX_RESPONDANTS]; value;
// corrected `for()` statement for all 3 parameters
for (loopCount = 0; loopCount < MAX_RESPONDANTS; loopCount++)
{
// prompt user for each input value
printf ("Please enter a value in range %d ... %d."
" Use %d to end input: \n ",
MIN_RESPONSE_VALUE,
MAX_RESPONSE_VALUE,
TERMINATOR);
// check for success
if( 1 != scanf("%d", &value) )
{
loopCount--; // adjust for `for` loop increment
continue;
}
if ( TERMINATOR == value )
{
break;
}
// only check for range after checking for exit
if (value >= MIN_RESPONSE_VALUE && value <= MAX_RESPONSE_VALUE)
{
printf( "response is: %d", value );
}
else
{
printf("Outside valid range. Please input another number.\n");
loopCount--; // adjust for `for` loop increment
continue;
}
// got a good value so save it
ratingCounters[loopCount] = value;
} // end for loop
printf("\n\nRating Number of Responses\n");
printf("------ --------------------\n");
return 0;
} // end function: main