好的。以下是您代码的快速审查。已嵌入注释。
在 #include
和 <stdio.h>
之间留一个空格。
这是一个非标准的仅适用于 Windows 的头文件,您不需要它。请勿包含此文件。
在包含标题时再次使用空格。
void main(void)
虽然这是合法的,但更常见的是在主函数中找到签名int main(int argc, char* argv[])
。我建议您使用该签名。
{
static int sum;
为什么要把它设为静态的?你是计划重复调用main并使sum
的先前结果从一次main调用持续到另一次吗?如果不是,那就不要将其设为静态。
int i,x,y,z;
char string[10];
考虑为字符串分配更多的空间。10个字符太少了。还要考虑创建一个变量来表示字符串的大小,而不是使用一个神奇数字,因为你可能需要在多个地方引用缓冲区的大小。
printf("Enter a string:\n");
gets(string);
不要这样做!!!函数gets是一个重大的安全漏洞!它会使你的程序容易受到缓冲区溢出攻击。相反,使用fgets,并指定你想要填充的缓冲区的大小,以避免溢出。你永远不应该使用纯粹的gets。
x=strlen(string)
考虑为x选择一个更具描述性的名称。也许可以选择len
。创建变量时,标识符长度超过一个字母是完全可以的(而且是好的)。
for(i=0; ;i++)
{
if(string[i]=='\0')
{
break;
}
考虑将终止条件放在for循环中:for(i = 0; string[i]!='\0'; i++)
。
y=pow(10,i);
z=string[x-i+1]*y;
提示:有一种比使用pow更明智的方法来完成这个任务。
sum+=z;
}
printf("%d",sum);
好的。上面的内容没问题,不过你可能想使用"%d\n"。
getch();
你不应该在所有系统上都这样做。相反,应该这样做:
#ifdef _WIN32
system("pause");
#endif
如果可能的话,我建议您避免那种奇怪的暂停行为。假设您的教授使用自动化脚本来验证程序的输出。在程序中加入任何形式的暂停(即使在Windows上),都会破坏这样的脚本。如果您不想在Windows上看到终端窗口消失,您应该从命令提示符中调用您的程序。
}
如果你按照我建议的更改签名为返回int类型,那么你需要在函数末尾添加语句return 0;
。
for(A;;B) { if (C) break; ... }
可以写成for(A; !C; B) { ... }
。 - ShinTakezoufor(A; !C; B)
! :D - ShinTakezou