return 下出现说明:应输入声明。

Dominia 2016-06-02 03:41:05
#include <stdio.h>
#define COLS 4
int sum2d(int ar[][COLS], int rows);
int sum(int ar[],int n);
int main(void)
{
int total1, total2,total3;
int * pt1;
int (*pt2)[COLS];

pt1 = (int [2]){10.20};
pt2 = (int [2][COLS]){{1,2,3,-9},{4,5,6,-8}};

total1 = sum(pt1,2);
total2 = sum2d(pt2,2);
total3 = sum((int []){4,4,4,5,5,5},6};
printf("total1 = %d\n", total1);
printf("total2 = %d\n", total2);
printf("total3 = %d\n", total3);

return 0;
}

int sum(int ar[], int n)
{
int i;
int total = 0;
for(i=0;i<n;i++)
total += ar[i];
return total;
}

int sum2d(int ar[][COLS], int rows)
{
int r;
int c;
int tot = 0;
for(r=0;r<rows;r++)
for(c=0;c<COLS;c++)
tot += ar[r][c];
return tot;
}


此段代码为C primer plus P277页[程序清单10.19]代码。
我是用的是 VS2010软件进行的编写。
出现以下波浪线问题:
1、21行 return 出现说明:应输入声明
2、11、12、16行 int 出现说明:不允许使用类型名
3、11、12、16行 ” { " 符号处出现说明:应输入" ; " (注:此处符号是英文标点)
4、17、18、19行 “ , " 符号处出现说明: 英输入 " ) " (注: 此处符号是英文标点)

...全文
12999 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-03
  • 打赏
  • 举报
回复
引用 15 楼 qcx1221 的回复:
[quote=引用 14 楼 zhao4zhong1 的回复:] “找到问题出现的症状和解决问题” 都不如 学习和练习如何 “找到问题出现的症状和解决问题” 重要。
我发现通过C-free能够通过运行并能正确显示结果。 这个代表编译器使用的标准不同吗?[/quote]
Dominia 2016-06-03
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
“找到问题出现的症状和解决问题” 都不如 学习和练习如何 “找到问题出现的症状和解决问题” 重要。
我发现通过C-free能够通过运行并能正确显示结果。 这个代表编译器使用的标准不同吗?
赵4老师 2016-06-03
  • 打赏
  • 举报
回复
“找到问题出现的症状和解决问题” 都不如 学习和练习如何 “找到问题出现的症状和解决问题” 重要。
Dominia 2016-06-03
  • 打赏
  • 举报
回复
用了另一款C-free编译器,居然能够通过。 疑问依然在。
Dominia 2016-06-03
  • 打赏
  • 举报
回复
引用 10 楼 Atom2004 的回复:
我印象中下面这种写法只是某些特殊版本的编译器才能识别吧,应该不属于标准C的语法吧。 pt1 = (int [2]){10.20}; 研究别人的写法,我觉得没有任何问题。但自己写代码的时候最好采用通熟易懂的写法。
这个不是别人的写法,而是C primer plus 书上的例题写法。 1、首先这个例题,我是在怀疑自己是不是有些许错误。 2、例题写法如果有问题,是错在哪个部分,他为什么这样写? 3、还是想要追根究底。 4、既然楼上各位都对此写法有疑问,而我google了暂也没发现有这类疑问搜索到。
paschen 2016-06-03
  • 打赏
  • 举报
回复
10.20 应该改成10, 20 另外没刚过这种用法
0深水蓝0 2016-06-03
  • 打赏
  • 举报
回复
我印象中下面这种写法只是某些特殊版本的编译器才能识别吧,应该不属于标准C的语法吧。 pt1 = (int [2]){10.20}; 研究别人的写法,我觉得没有任何问题。但自己写代码的时候最好采用通熟易懂的写法。
Dominia 2016-06-02
  • 打赏
  • 举报
回复
引用 8 楼 qq423399099 的回复:
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
实在话! 但,初学者,就是因为这些疑问,在寻找问题的症状。
小灸舞 版主 2016-06-02
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

不要写连自己也预测不了结果的代码!
Dominia 2016-06-02
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
学习了! 不过为什么出现的这个问题还是弄不明白。 数组定义方式按:
    int temp_1[2] = {10, 20};
    int temp_2[2][4] = {{1,2,3,-9},{4,5,6,-8}};
    int temp_3[6] = {4,4,4,5,5,5};
    pt1 = temp_1;
    pt2 = temp_2;
是较容易理解的。 但是例题中:
    pt1 = (int [2]){10.20};
    pt2 = (int [2][COLS]){{1,2,3,-9},{4,5,6,-8}};
 
    total1 = sum(pt1,2);
    total2 = sum2d(pt2,2);
    total3 = sum((int []){4,4,4,5,5,5},6);
这种定义方式却行不通?
赵4老师 2016-06-02
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
Dominia 2016-06-02
  • 打赏
  • 举报
回复
引用 4 楼 Longerlive 的回复:
我觉得 return 0有问题
return 0 处没问题,只是前面有个符号错了。 而更改之后17\18\19及return处问题均没有了,但还是有2楼的问题。
Longerlive 2016-06-02
  • 打赏
  • 举报
回复
我觉得 return 0有问题
Dominia 2016-06-02
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:

#include <stdio.h>
#define COLS 4
int sum2d(int ar[][COLS], int rows);
int sum(int ar[],int n);
int main(void)
{
	int total1, total2,total3;
	int * pt1;
	int (*pt2)[COLS];

	int temp_1[2] = {10, 20};
	int temp_2[2][4] = {{1,2,3,-9},{4,5,6,-8}};
	int temp_3[6] = {4,4,4,5,5,5};
	pt1 = temp_1;
	pt2 = temp_2;

	total1 = sum(pt1,2);
	total2 = sum2d(pt2,2);
	total3 = sum(temp_3,6);
	printf("total1 = %d\n", total1);
	printf("total2 = %d\n", total2);
	printf("total3 = %d\n", total3);

	return 0;
}

int sum(int ar[], int n)
{
	int i;
	int total = 0;
	for(i=0;i<n;i++)
		total += ar[i];
	return total;
}

int sum2d(int ar[][COLS], int rows)
{
	int r;
	int c;
	int tot = 0;
	for(r=0;r<rows;r++)
		for(c=0;c<COLS;c++)
			tot += ar[r][c];
	return tot;
}
这种方法定义数组是没问题。 而书上例题所在的定义数组方式却无法运行,这个是何问题? 例题所在目录:10.9 复合文字 程序清单10.19
小灸舞 版主 2016-06-02
  • 打赏
  • 举报
回复

#include <stdio.h>
#define COLS 4
int sum2d(int ar[][COLS], int rows);
int sum(int ar[],int n);
int main(void)
{
	int total1, total2,total3;
	int * pt1;
	int (*pt2)[COLS];

	int temp_1[2] = {10, 20};
	int temp_2[2][4] = {{1,2,3,-9},{4,5,6,-8}};
	int temp_3[6] = {4,4,4,5,5,5};
	pt1 = temp_1;
	pt2 = temp_2;

	total1 = sum(pt1,2);
	total2 = sum2d(pt2,2);
	total3 = sum(temp_3,6);
	printf("total1 = %d\n", total1);
	printf("total2 = %d\n", total2);
	printf("total3 = %d\n", total3);

	return 0;
}

int sum(int ar[], int n)
{
	int i;
	int total = 0;
	for(i=0;i<n;i++)
		total += ar[i];
	return total;
}

int sum2d(int ar[][COLS], int rows)
{
	int r;
	int c;
	int tot = 0;
	for(r=0;r<rows;r++)
		for(c=0;c<COLS;c++)
			tot += ar[r][c];
	return tot;
}
Dominia 2016-06-02
  • 打赏
  • 举报
回复
更新:
#include <stdio.h>
#define COLS 4
int sum2d(int ar[][COLS], int rows);
int sum(int ar[],int n);
int main(void)
{
	int total1, total2,total3;
	int * pt1;
	int (*pt2)[COLS];

	pt1 = (int [2]){10.20};
	pt2 = (int [2][COLS]){{1,2,3,-9},{4,5,6,-8}};

	total1 = sum(pt1,2);
	total2 = sum2d(pt2,2);
	total3 = sum((int []){4,4,4,5,5,5},6);
	printf("total1 = %d\n", total1);
	printf("total2 = %d\n", total2);
	printf("total3 = %d\n", total3);

	return 0;
}

int sum(int ar[], int n)
{
	int i;
	int total = 0;
	for(i=0;i<n;i++)
		total += ar[i];
	return total;
}

int sum2d(int ar[][COLS], int rows)
{
	int r;
	int c;
	int tot = 0;
	for(r=0;r<rows;r++)
		for(c=0;c<COLS;c++)
			tot += ar[r][c];
	return tot;
}
自己找到一处小错误,第4点错误没有了!

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧