反转用户输入的整数(C)

问题描述 投票:1回答:3

我想做的是反转用户输入的数字字符串。发生的事情是它编译并运行,直到我在scanf之后按Enter键为止。然后我收到一些Microsoft运行时错误...出了什么问题???

注意:这是家庭作业,但是我已经弄清楚了逻辑。这个错误让我感到困惑。

#include <stdio.h>

int main(){unsigned int GiveStr = 0;char * charIt;printf(“输入要反转的数字。\ t”);scanf(“%d”,&giveStr);fflush(标准输入);sprintf(charIt,“%d”,GiveStr);revStr(giveStr);的getchar();返回0;}revStr(unsigned int n){字符缓冲区[100];int uselessvar,计数器= 0;对于(; n> 0;){uselessvar = sprintf(&buffer [counter],“%d”,n);计数器++;}for(计数器= 0;计数器> 0;){printf(“%c”,buffer [counter]);计数器 - ;}返回0;}

编辑:刷新换行符stdin:/以及图像here只是不使用该程序。与我的。

c string reverse
3个回答
0
投票

对于家庭作业问题,如果您有K&R book,请转到第3.5节并仔细阅读。特别是功能reverse()itoa()。这些应该给您一个很好的主意,以解决您的家庭作业问题。


5
投票

您正在尝试访问未在以下位置分配的内存:

 sprintf(charIt, "%d", giveStr);

char* charIt;更改为char charIt[50];,并且一切都应该很好(很好,至少是分段错误部分)

也...将charIt传递给revStr,因为charIt包含带有我们编号的字符串。然后,在revStr中使用简单的for循环即可解决问题(无论如何,第二个循环的目的是什么?)

void revStr(char *giveStr)
{
  int counter;
  for (counter = strlen(giveStr)-1; counter >= 0; counter--)
  {
    printf("%c", giveStr[counter]);
  }
  printf("\n");
}

这将打印我们的char表示从最后一个到第一个的每个char。您应该阅读有关for循环的更多信息。


1
投票

您的程序如何退出for(; n> 0;)循环?在遇到总线错误之前,计数器是否只会增加?

ED:

[我认为,“我已经弄清楚了逻辑”的说法有些乐观。 :^)毫无疑问,有人会发布应该完成的方式在我写完这篇文章的时候,但值得指出的是出了什么问题(除了其他地方提到的内存分配问题):

您的第一个循环“ for(; n> 0;)”很奇怪,因为您要将整数n打印到计数器的缓冲区中。那么,为什么您需要多次执行此操作?如果您选择的是单个数字,则可以,但是不是,显然,您知道该怎么做,因为您已经使用了“ sprintf(charIt,“%d”,GiveStr);“。 [此外:giveStr不是一个无符号整数变量的好名字!]

您的第二个循环也有奇怪的条件:将counter设置为0,将counter> 0设置为条件,然后减少内部的counter。显然,这不会以您想要的方式遍历字符。假设您认为第一个循环是逐个字符,那么也许您正在考虑从计数器1循环到0?

© www.soinside.com 2019 - 2024. All rights reserved.