C初学者不终止程序
C beginner not terminating program
我是 C 的初学者,我接到了编写一个简单的求和程序的任务,我必须在其中使用我自己的 atoi 函数。
行为真的很奇怪:
sum 1 -> 工作正常,它写 "the sum is 1"
sum 1 2 -> 它不会终止
sum -1 -2 -> 它只写第一个数字,如果我使用超过 2 它不会终止
这是部分代码,我想错误在mi_atoi,因为如果我使用库函数它可以正常工作:
unsigned int char2int(char c)
{
return c-'0';
}
int mi_atoi(char *s)
{
int x = 0;
if (s[0] == 45) {
for (i = 1; s[i] != '[=10=]'; i++) {
x = x*10 - char2int(s[i]);
}
}
else {
for (i = 0; s[i] != '[=10=]'; i++) {
x = x*10 + char2int(s[i]);
}
}
return x;
}
这里是主要的(函数 esNumero 只是检查参数是否是一个数字并且它工作正常):
int main (int argc, char *argv[])
{
char buf[80];
int suma = 0;
for (i = 1; i < argc; i++) {
if (esNumero (argv[i]) == 0) {
sprintf (buf, "El parametro \"%s\" no es un numero\n", argv[i]);
write (1, buf, strlen (buf));
return 0;
}
else {
suma = suma + mi_atoi(argv[i]);
}
}
sprintf (buf, "La suma es %d\n", suma);
write (1, buf, strlen (buf));
return 0;
}
你能看看我的代码并告诉我我做错了什么吗?
您的 i
是一个全局变量,因此在 main
和 mi_atoi
之间共享。每次调用 mi_atoi
,它都会重置 i
,因此 main
中的循环永远不会终止。
您通过不 post 声明 i
(更不用说 Minimal, Complete, and Verifiable Example)来巧妙地试图隐藏错误,但我们可以看到 i
是未在您执行的函数中声明为局部变量 post.
我是 C 的初学者,我接到了编写一个简单的求和程序的任务,我必须在其中使用我自己的 atoi 函数。
行为真的很奇怪:
sum 1 -> 工作正常,它写 "the sum is 1"
sum 1 2 -> 它不会终止
sum -1 -2 -> 它只写第一个数字,如果我使用超过 2 它不会终止
这是部分代码,我想错误在mi_atoi,因为如果我使用库函数它可以正常工作:
unsigned int char2int(char c)
{
return c-'0';
}
int mi_atoi(char *s)
{
int x = 0;
if (s[0] == 45) {
for (i = 1; s[i] != '[=10=]'; i++) {
x = x*10 - char2int(s[i]);
}
}
else {
for (i = 0; s[i] != '[=10=]'; i++) {
x = x*10 + char2int(s[i]);
}
}
return x;
}
这里是主要的(函数 esNumero 只是检查参数是否是一个数字并且它工作正常):
int main (int argc, char *argv[])
{
char buf[80];
int suma = 0;
for (i = 1; i < argc; i++) {
if (esNumero (argv[i]) == 0) {
sprintf (buf, "El parametro \"%s\" no es un numero\n", argv[i]);
write (1, buf, strlen (buf));
return 0;
}
else {
suma = suma + mi_atoi(argv[i]);
}
}
sprintf (buf, "La suma es %d\n", suma);
write (1, buf, strlen (buf));
return 0;
}
你能看看我的代码并告诉我我做错了什么吗?
您的 i
是一个全局变量,因此在 main
和 mi_atoi
之间共享。每次调用 mi_atoi
,它都会重置 i
,因此 main
中的循环永远不会终止。
您通过不 post 声明 i
(更不用说 Minimal, Complete, and Verifiable Example)来巧妙地试图隐藏错误,但我们可以看到 i
是未在您执行的函数中声明为局部变量 post.