|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码是进阶的答案,- [code]#include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str[MAX];
- char *target = str;
- char ch;
- int length = 0;
- printf("请输入一个字符串:");
- fgets(str, MAX, stdin);
- while (1)
- {
- ch = *target++;
- if (ch == '\0')
- {
- break;
- }
- if ((int)ch < 0)
- {
- target += 2;
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码 [/code]
本帖最后由 jackz007 于 2019-12-22 12:40 编辑
两个问题:
1、通过 fgets() 获取的字符串最后那个字符一定是换行符 '\n',而这个换行符显然并非我们所预期,所以,应该检测换行符,而不是 '\0';
2、if(ch < 0) 时,target ++ 就够了,target += 2 就过了。
- ch = * target++ ; // 这里 target 加过了
- . . . . . .
- if ((int)ch < 0)
- {
- target += 2 ; // 这里 target 应该 + 1,+ 2 就错了。
复制代码
下面是我修改的版本,供楼主参考
- #include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str[MAX] ;
- char * target = str ;
- int length = 0 ;
- printf("请输入一个字符串:") ;
- fgets(str , MAX , stdin) ;
- for(length = 0 ; length < MAX && * target != '\n' ; length ++ , target ++) if(* target < 0) target ++ ;
- * target = '\0' ;
- printf("您总共输入了 %d 个字符!\n", length) ;
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o x x.c
- C:\Bin>x
- 请输入一个字符串:TDM GCC32 5.1.0 开发环境设置完毕
- 您总共输入了 24 个字符!
- C:\Bin>
复制代码
|
-
这是我的运行结果
-
|