#include <stdio. h> int len( ) ; int main( ) { int n; printf("请输入一个字符串(以回车键结束输人):"); n=len( ) ; printf("字符串中共有%d个字符\n" ,n); return 0; } int len( ) { char с; int m=0; c=_; while (c! ='\n') { _; c=getchar( );} return (m) ;}
时间: 2023-12-08 19:06:02 浏览: 71
这是一个求输入字符串长度的程序,使用了函数 len() 来计算字符串长度。程序的流程如下:
1. 在主函数 main() 中,提示用户输入一个字符串,并调用函数 len() 计算字符串长度。
2. 函数 len() 中,定义了变量 c 和 m,其中 c 存储输入的字符,m 存储字符串长度。
3. 在 while 循环中,每次从输入中读取一个字符,直到读取到换行符为止。
4. 在循环中,每次 m 的值加 1,表示读取到一个字符。
5. 最终返回变量 m 的值,即为字符串长度。
6. 主函数中,输出字符串长度。
需要注意的是,代码中有一些错误,如函数 len() 中 c = _ 应该改为 c = ' ',另外在 while 循环中应该将 m++ 改为 ++m。下面是修正后的代码:
```
#include <stdio.h>
int len() {
char c;
int m=0;
c = ' ';
while (c != '\n') {
++m;
c = getchar();
}
return m;
}
int main() {
int n;
printf("请输入一个字符串(以回车键结束输入):");
n = len();
printf("字符串中共有%d个字符\n", n);
return 0;
}
```
相关问题
请使用while函数将fun函数的内容补充完整,编写出一个C语言程序,对字符串,除首、尾字符外,将其字符按ASCII编码数值降序排列的操作:#include<stdio.h> #include<ctype.h> #include<string.h> #include<conio.h> void wwjt(); void fun(char *a,int len) { int i,j; char t; } main(){ char s[100]; int l; printf("输入字符串:"); gets(s); l=strlen(s); fun(s,l); printf("\n%s\n",s); wwjt(); }
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>
void wwjt();
void fun(char *a, int len) {
int i, j;
char t;
i = 1;
j = len - 2; //除去首尾字符后的最后一个字符的下标
while (i < j) {
while (i < j && a[i] > a[j]) {
t = a[i];
a[i] = a[j];
a[j] = t;
i++;
j--;
}
i++;
j--;
}
}
int main() {
char s[100];
int l;
printf("输入字符串:");
gets(s);
l = strlen(s);
fun(s, l);
printf("\n%s\n", s);
wwjt();
return 0;
}
void wwjt() {
printf("我爱计算机网络课程设计!\n");
}
下方代码的功能是获取输入的字符串的长度,请指出代码哪里存在问题:#include<stdio.h> #include<stdlib.h> #include<string.h> int getLen(char* ss) { int* p = ss; int c = 0; while (*p != '\0') { printf("%c\n",*p); p++; c++; } return c; } int main() { char ss[30] = {0}; gets(ss); int len=getLen(ss); printf("len=%d",len); return 0; }
这段代码中存在以下问题:
1. 在第5行中,将字符指针p直接赋值为字符串指针ss是错误的,因为字符指针和字符串指针是不同的类型。正确的方式是将字符指针p指向字符串指针ss所指向的字符串的第一个字符,即 `int* p = &ss[0];` 或 `char* p = ss;`。
2. 在第12行中,使用了不安全的函数`gets`,该函数会导致缓冲区溢出漏洞,应该使用更安全的函数`fgets`替代。
3. 在第13行中,输出的字符串长度不包括字符串末尾的'\0',因此应该在返回值前减去1。
修改后的代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getLen(char* ss) {
char* p = ss;
int c = 0;
while (*p != '\0') {
printf("%c\n", *p);
p++;
c++;
}
return c - 1;
}
int main() {
char ss[30] = {0};
fgets(ss, 30, stdin);
int len = getLen(ss);
printf("len=%d", len);
return 0;
}
```
阅读全文