C语言基础,求大神指教

2025-03-04 21:17:47
推荐回答(4个)
回答1:

我也是初学者。你那两个while循环,用的真是好。 可能是编译器不同的原因,我的只出现一个8. 是因为 在 s[X]=='\0' 之前,自动获取了一个'8' ,'8' 之前还有两个字符 'H' 和 '黑色方块' 怎么获取的,我是真不知道。可能又是某种规定,或者懂汇编的人能知道。也可能就是因为那个太巧妙的循环原因。太晚了。得睡觉了。明天我也要仔细研究一下这个事。

回答2:

当指针P指向的元素不为结束符时,进入循环。

但是如果这时候P指向任意不是0-9的东西(比如你例子里的字母V,要不就是空格),仍然会走到给n赋值0,同时给A[i]赋值n,再i++的这些步骤。

建议把最外层while循环中的n=0赋值放入“while指针p不指向数字”这个判断中。
建议把对A[i]的赋值放入“while指针p指向数字”的判断中。
修改后的代码如下,改的地方加了注释,有问题请追问。
#include
#include
#include

main()
{ char s[100], *p=s;
int n=0, i=0, A[10];
printf("Input a string: ");
gets(s);
while ((*p)!='\0')
{
while (((*p)<'0' || (*p)>'9')) {
if(((*p)!='\0')) /*如果指针p指向元素的下一位不是结束符才继续,是就break*/
{
p++;
}
else
{
break;
}
}

while (((*p)>='0') && ((*p)<='9'))
{
n = n*10 + (*p) - 48; p++;
if(((*p)<'0' || (*p)>'9'))/*加个判断,如果下一位不是数字,就赋值给数组A,否则不赋值,让n继续变化*/
{
A[i++]=n;
}
}
}

printf("the int Number = %d\n",i);
for (n=0; n printf("\n");
system("pause");
return 0;
}

回答3:

n = n*10 + (*p) - 48?

回答4:

应该是循环有问题,自己找看吧。
这不可能是计算机执行出了问题,要仔细观察,能自己发现错在哪里就好解决了。