|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
需求:计算中英混合的字符串长度
问题:我这个代码有什么错误的地方吗,为啥输出结果不对?
原问题链接:https://fishc.com.cn/forum.php?m ... peid%26typeid%3D570
- #include <stdio.h>
- #define MAX 1024
- int main(void)
- {
- char string[MAX];
- char* p = string;
- int count = 0;
- int ch;
-
- printf("请输入一个字符串:");
- fgets(string, MAX, stdin);
-
-
- while(ch = *(p++) != '\0')
- {
- if(ch < 0)
- {
- p += 2;
- }
- count ++;
- }
-
- printf("您总共输入了%d个字符", count-1);
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2019-11-25 11:59 编辑
问题远不止于此,
while(ch = *( p++) != '\0')
{
if(ch < 0)
{
p += 2;
. . . . . .
当 ch 是中文字符时,p 将步进 3 个 char 单位,这个是你预期的吗?
试试我修改的版本?
- #include <stdio.h>
- #define MAX 1024
- int main(void)
- {
- char string[MAX] , * p = string , ch ;
- int count ;
- printf("请输入一个字符串:") ;
- fgets(string , MAX , stdin) ;
- for(count = 0 , p = string ; (ch = * p) != '\n' ; p ++ , count ++ ) if(ch < 0) p ++ ; // 注意,循环终止条件是 '\n' 不是 '\0'
- printf("您总共输入了%d个字符", count) ; // 注意,这里相应地是 count,不是 count - 1
- return 0 ;
- }
复制代码
|
-
|