语句“Char*p=“C Language”;”的作用是使指针变量p指向字符串的起始地址,千万不要认为是将字符串中的字符赋给指针变量p。p是指向字符型数据的指针变量,它的值是地址。例7.18有一行字符,要求删除指定的字符。......
2023-11-18
用printf() 函数输出字符数组元素,既可以使用格式符“%c”逐个字符的输出,也可以使用格式符“%s”将字符数组中存放的字符串整体输出。
例4.7 输出一个形如“丰”字的图形。
程序输出结果如图4.4所示。
图4.4 例4.7输出结果
从例4.7可知,逐个字符的输出,使用的格式符是“%c”;以字符串整体一次输出,使用的格式符是“%s”。
在用“%s”输出整个字符串时,要注意以下几点:
(1)输出时系统要检测字符串结束符’\0’,一旦遇到’\0’就结束输出操作,并且不输出字符串的结束标志’\0’字符。
(2)printf()函数中的输出项是字符数组名,而不是数组元素名。例如下面的写法就是错误的:
printf(“%s”,a[0]);
(3)如果数组长度大于字符串的实际长度,也只输出’\0’前的字符。例如:
char a[15]=“Good”;
printf(“%s”,a);
程序只输出“Good”4个字符,而不是15个(数组长度)字符,在遇到’\0’便结束输出。
(4)若一个字符数组中包含了多个’\0’,则遇到第一个’\0’就结束输出。例如:
运行程序时,屏幕显示:
you
由运行结果可知,在第一个’\0’后面的内容不会被输出。
2.字符数组的输入
与输出函数printf()类似,可以用格式符“%c”或“%s”向字符数组输入字符或字符串。
(1)使用“%c”格式符向字符数组逐个输入字符。
程序运行时,如果输入字符串“TC程序设计”,则屏幕显示如下:
请输入一个字符串:TC程序设计
数组a中存放的字符是:TC程序
数组b中存放的字符是:study
数组a的长度是6,显然输入的字符数大于字符数组a的长度,因此数组a只存放前6个字符。其他的字符存放在数据缓冲区中,供以后的输入函数使用。不过,实际使用时应该避免出现输入字符数大于数组长度的情况,以免其他变量得到不想要的数据。
(2)使用“%s”格式符向字符数组输入字符串。
(www.chuimin.cn)
程序运行时,如果输入字符串“TC程序设计”,则屏幕显示如下:
请输入一个字符串:TC程序设计
数组a中存放的字符是:TC程序设计
数组b中存放的字符是:设计
从显示信息可以看出:输入的字符不仅占用了数组a的存储空间,而且占用了数组b的存储空间,影响了数组b中存放的数据。因此,使用这种方法给数组元素赋值时,应该避免出现输入字符数大于数组长度的情况,以免破坏相邻存储空间的数据。
注意:在scanf()函数中使用格式符“%c”时,输入项就是字符数组元素,并且需要加地址符“ & ”,如 & a[i];如果在scanf()函数中使用格式符“%s”,输入项就是字符数组名,且不能在其前加地址符“ & ”,因为数组名就代表了相应字符数组在内存中的存储地址。例如:
char s[10];
scanf(“%s”,& s); /*输入项 & s就是错误的。*/
在scanf函数中使用格式符“%s”输入字符串时,输入的前置空格将被系统自动删除。其余的空格和回车符都被作为字符串的分隔符。因此,如果输入的字符串中间含有空格,系统就把输入的字符按空格分成多个字符串。如:
main( )
{
char a[20],b[20],c[20];
printf(“请输入字符串:”);
scanf(“%s”,a);
scanf(“%s%s”,b,c);
printf(“数组a:%s\n”,a);
printf(“数组b:%s\n”,b);
printf(“数组b:%s\n”,c);
}
运行程序时,如果输入“I am fine”,幕显示如下:
请输入字符串:I am fine
数组a:I
数组b:am
数组c:fine
屏幕显示信息说明:系统是把“I”“am”“fine”都作为字符串处理,而不是把输入的“I am fine”作为一个字符串处理。这是因为scanf()函数中使用格式符“%s”输入字符串时,系统自动默认以空格或回车键作为字符串的分隔符。若要输入包含有空格的字符串,应采用格式符“%c”,逐个地将字符赋给字符数组中的元素。例如:
运行程序时,如果输入“we are happy”,屏幕显示如下:
请输入字符串:we are happy
数组a:we ar
数组b:e
数组c:happy
从程序中,我们可以知道要将数组a中的字符元素转换为一个完整的字符串,应在其结束位置加入’\0’的字符串结束标志。这样,数组a中的字符串就可以包括空格字符了。
有关C语言程序设计 第2版的文章
语句“Char*p=“C Language”;”的作用是使指针变量p指向字符串的起始地址,千万不要认为是将字符串中的字符赋给指针变量p。p是指向字符型数据的指针变量,它的值是地址。例7.18有一行字符,要求删除指定的字符。......
2023-11-18
图4.9字符数组初始化状态③ 如果字符数组的元素个数与初值相同,可在定义时省略数组长度。图4.11程序运行结果4.字符串字符串:是用双引号括起来的字符序列,也称为字符串常量。图4.13存储状态用printf 函数以格式符%s 输出字符串时,首先按字符数组名找到数组起始地址,然后从起始地址开始逐个输出其中的字符,直到遇上字符串结束符‘\0’时为止。......
2023-10-21
项目2:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。图3.15兔子问题输出结果根据以上的分析可以知道,循环次数可以为0,因此该程序是一个条件型循环,可以利用while语句编写程序。熟悉了循环结构在程序设计中的运用,循环结构语句包含了while语句、do…......
2023-11-18
";无论使用哪种形式,在此后的程序代码中,都可以使用字符指针变量sPtr表示字符串数据"I Love China!使用字符指针变量表示字符串数据时,最容易出现的错误就是将未确定指向的字符串指针变量直接使用。使用指向字符数组的指针变量处理字符串示例。......
2023-11-20
前面已经讨论了数组的输入输出,采用循环结构同样可以实现字符数组的输入输出。程序设计中常常希望将字符串作为整体进行输入输出处理,C标准库中提供了专门用于字符串输入输出的函数。字符串输入输出示例。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
C语言把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算,功能强大。另外,C语言还把括号、下标、强制类型转换、取地址等都作为运算符处理,并通过与算数运算符的组合达到不同的目的,从而使程序更加简洁明了。C语言具有超强的可移植性。总之,C语言在运算符方面是比较容易让人混淆的。......
2023-11-18
在C程序中,可以通过标准库函数fgets和fputs对文件中的字符串数据进行读写。函数fgets的返回值为s对象的首地址,若直接读到文件结尾标志或操作出错时则返回NULL。为了将输入的字符串分隔开,结合fgets函数在读到'\n'时会结束一次函数调用的特点,在每个字符串写入文件后再用fputc函数在字符串后写入一个换行符'\n',用以分隔写入的字符串数据。编写程序实现功能:打开例5.5创建的数据文件,将文件中的字符串数据读出并显示在屏幕上。......
2023-11-20
相关推荐