C语言21课后题
需求:计算中英混合的字符串长度问题:我这个代码有什么错误的地方吗,为啥输出结果不对?
原问题链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=72205&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570
#include <stdio.h>
#define MAX 1024
int main(void)
{
char string;
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;
} 这道题已经明白了 while(ch = *(p++) != '\0') 应该改成 while((ch = *(p++)) != '\0') 本帖最后由 jackz007 于 2019-11-25 11:59 编辑
糖逗 发表于 2019-11-25 08:49
这道题已经明白了 while(ch = *(p++) != '\0') 应该改成 while((ch = *(p++)) != '\0')
问题远不止于此,
while(ch = *(p++) != '\0')
{
if(ch < 0)
{
p += 2;
. . . . . .
当 ch 是中文字符时,p 将步进 3 个 char 单位,这个是你预期的吗?
试试我修改的版本?
#include <stdio.h>
#define MAX 1024
int main(void)
{
char string , * 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 ;
} jackz007 发表于 2019-11-25 11:55
问题远不止于此,
while(ch = *(p++) != '\0')
{
昨天和你讨论后那个问题改正过来了,后来我运行不对是因为没加括号{:10_278:} jackz007 发表于 2019-11-25 11:55
问题远不止于此,
while(ch = *(p++) != '\0')
{
你的代码很值得学习,我要敲一遍你的。 糖逗 发表于 2019-11-25 14:06
你的代码很值得学习,我要敲一遍你的。
楼主客气了,彼此互相学习。
页:
[1]