怎么输出string?

szp895 2009-04-16 02:04:07
我想知道这段程序最后怎么才能输出一个string呢?

#include <stdio.h>
#include <string.h>
/**********************************
* Name: Alan.SONG
* ID: u3019948
* this program is for ISE assignment 3 of medals
* University of Canberra
**********************************/

void readArray(int numElts, int array[])
{ // read data from a line into an array
int i;
for (i=0; i<numElts; i++)
{
scanf("%d", &array[i]);
}
}

char pointArray(int numElts, int arrayList[], char medalsArray[])
{
int ix, max;
max = arrayList[0];
medalsArray[0] = 'G';
for (ix=1; ix<numElts; ix++)
{
if(arrayList[ix]-max==0)
medalsArray[ix] = 'G';
else if (arrayList[ix]-max==1)
medalsArray[ix] = 'S';
else if (arrayList[ix]-max==2)
medalsArray[ix] = 'B';
else
medalsArray[ix] = 'N';
}
return medalsArray[ix];
}

int main()
{
const MaxCompetitors = 11;
int numCompetitors, medalsList[MaxCompetitors];
char medalsArray[MaxCompetitors];
scanf("%d", &numCompetitors);
readArray(numCompetitors, medalsList);
printf("%s\n", pointArray(numCompetitors, medalsList, medalsArray));
return 0;
}



如果把printf里面的%c换成%c,最后输出是空的,这是怎么回事?

还有个问题,比如书scanf一个string,比如scanf("%s", array);,那array前面为什么可以不加&这个地址符?

谢谢各位了,我身边没有教程,没办法查,麻烦了!嘿嘿
...全文
861 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
szp895 2009-04-16
  • 打赏
  • 举报
回复
好的 感谢楼上各位了
开始散分咯!
zgjxwl 2009-04-16
  • 打赏
  • 举报
回复
你返回一个char类型指针,指向这个char字符数组啊。要是返回一个char,则printf只能print一个char,字符数组是可以转换为字符指针的。。用字符指针指向字符数组这么大的内存块。可以访问并输出它。
warren258 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 szp895 的回复:]
十分感谢5楼和7楼,一会加分。
顺便再问个很白痴的问题,char *pointArray(...)的*去掉为什么会出现错误?这里为什么要加指针? 是不是这里char *pointArray()对应的是main里面的PointArray? 那不加为什么就不行呢?


麻烦了
回答之后立刻加分!

[/Quote]
char *point array()表示他的返回值是一个指针,也就是一个地址,你可以把它的返回值传递给指针。main中的pointarray就是这个函数啊。
lingyin55 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 szp895 的回复:]
十分感谢5楼和7楼,一会加分。
顺便再问个很白痴的问题,char *pointArray(...)的*去掉为什么会出现错误?这里为什么要加指针? 是不是这里char *pointArray()对应的是main里面的PointArray? 那不加为什么就不行呢?


麻烦了
回答之后立刻加分!
[/Quote]

char *pointArray(...)返回的是一个指向char的指针,不加*返回的只是一个字符。
xiaocha 2009-04-16
  • 打赏
  • 举报
回复
顺便再问个很白痴的问题,char *pointArray(...)的*去掉为什么会出现错误?这里为什么要加指针?
%s 需要的是串指针,你给他一个char,肯定错了

是不是这里char *pointArray()对应的是main里面的PointArray?
是的,main 中的 pointArray 就是调用char *pointArray() 函数
szp895 2009-04-16
  • 打赏
  • 举报
回复
十分感谢5楼和7楼,一会加分。
顺便再问个很白痴的问题,char *pointArray(...)的*去掉为什么会出现错误?这里为什么要加指针? 是不是这里char *pointArray()对应的是main里面的PointArray? 那不加为什么就不行呢?


麻烦了
回答之后立刻加分!
xiaocha 2009-04-16
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
/**********************************
* Name: Alan.SONG
* ID: u3019948
* this program is for ISE assignment 3 of medals
* University of Canberra
**********************************/

void readArray(int numElts, int array[])
{ // read data from a line into an array
int i;
for (i=0; i<numElts; i++)
{
scanf("%d", &array[i]);
}
}

char *pointArray(int numElts, int arrayList[], char medalsArray[])
{
int ix, max;
max = arrayList[0];
medalsArray[0] = 'G';
for (ix=1; ix<numElts; ix++)
{
if(arrayList[ix]-max==0)
medalsArray[ix] = 'G';
else if (arrayList[ix]-max==1)
medalsArray[ix] = 'S';
else if (arrayList[ix]-max==2)
medalsArray[ix] = 'B';
else
medalsArray[ix] = 'N';
}
medalsArray[ix] = '\0'; // 加串结束
return medalsArray; // 返回串
}

int main()
{
const MaxCompetitors = 11;
int numCompetitors, medalsList[MaxCompetitors];
char medalsArray[MaxCompetitors+1]; // 字符串,+1 防止越界
scanf("%d", &numCompetitors);
readArray(numCompetitors, medalsList);
printf("%s\n", pointArray(numCompetitors, medalsList, medalsArray));
return 0;
}
zgjxwl 2009-04-16
  • 打赏
  • 举报
回复
字符数组要记得'\0'的
zgjxwl 2009-04-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
/**********************************
* Name: Alan.SONG
* ID: u3019948
* this program is for ISE assignment 3 of medals
* University of Canberra
**********************************/

void readArray(int numElts, int array[])
{ // read data from a line into an array
int i;
for (i=0; i<numElts; i++)
{
scanf("%d", &array[i]);
}
}

char* pointArray(int numElts, int arrayList[], char medalsArray[])
{
int ix, max;
max = arrayList[0];
medalsArray[0] = 'G';
for (ix=1; ix<numElts; ix++)
{
if(arrayList[ix]-max==0)
medalsArray[ix] = 'G';
else if (arrayList[ix]-max==1)
medalsArray[ix] = 'S';
else if (arrayList[ix]-max==2)
medalsArray[ix] = 'B';
else
medalsArray[ix] = 'N';
if(ix==numElts-1)
medalsArray[ix]='\0';
}
return medalsArray;//..
}

int main()
{
const int MaxCompetitors = 11;
int numCompetitors, medalsList[MaxCompetitors];
char medalsArray[MaxCompetitors];
scanf("%d", &numCompetitors);
readArray(numCompetitors, medalsList);
printf("%s\n", pointArray(numCompetitors, medalsList, medalsArray));
return 0;
}



11
1
2
3
4
5
6
7
8
9
10
11
GSBNNNNNNN
lingyin55 2009-04-16
  • 打赏
  • 举报
回复
如果把printf里面的%c换成%c,最后输出是空的,这是怎么回事?

%c用于单个字符的输出。

还有个问题,比如书scanf一个string,比如scanf("%s", array);,那array前面为什么可以不加&这个地址符?

可以加也可以不加,数组名就相当于这个字符串的首地址。
  • 打赏
  • 举报
回复
如果把printf里面的%c换成%c,最后输出是空的,这是怎么回事?

还有个问题,比如书scanf一个string,比如scanf("%s", array);,那array前面为什么可以不加&这个地址符?


%s是输出字符串,参数为字符串的首地址.%c输出字符,参数为该字符.

array是数组,代表该字符串首地址.
东莞某某某 2009-04-16
  • 打赏
  • 举报
回复
C规定数组名为数组首地址
coverallwangp 2009-04-16
  • 打赏
  • 举报
回复
array是数组吧,作为参数的时候自动转换成首地址。所以不用加&

69,369

社区成员

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

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