代码应该从用户那里获取一个整数并将其转换为字符串,字符串中的第一个位置需要是数字的类型(低于零 - 高于零 + 和零,简单的没有)
#define GIVE_ME_THE_RIGHT_ARRAY_SIZE 2
#define MAX_INT_LENGTH_IN_C 10
char numberType(int number);
int main(void)
{
int number=0;
char string[MAX_INT_LENGTH_IN_C]={0};
char memoryString[MAX_INT_LENGTH_IN_C]={0};
printf("Enter num: ");
scanf("%d",&number);
if(number>0){
string[0]='+';
}
sprintf(memoryString,"%d",number);
for(int i=0;memoryString[i]!=0;i++ )
{
string[i+1]=memoryString[i];
}
printf("string: %s length: %d",string,strlen(string));
}
Run Code Online (Sandbox Code Playgroud)
没有必要使用所有循环和多个数组来确保+/-数字输出为字符串之前。sprintf提供'+'可以与转换说明符一起包含的标志以放置+/-在整数转换之前,例如
sprintf (memoryString, "%+d", number);
Run Code Online (Sandbox Code Playgroud)
此外,除非您检查 return ,否则您无法正确使用任何输入函数。将这些部分放在一起,并为(例如)提供适当的转换说明符,您的代码简化为:size_t"%zu"
#include <stdio.h>
#include <string.h>
#define MAX_INT_LENGTH_IN_C 12
int main(void)
{
int number=0;
char memoryString[MAX_INT_LENGTH_IN_C] = "";
printf ("Enter num: ");
if (scanf("%d",&number) != 1) {
fputs ("error: invalid integer input.\n", stderr);
return 1;
}
sprintf (memoryString, "%+d", number);
printf ("memoryString: %s length: %zu\n",
memoryString, strlen(memoryString));
}
Run Code Online (Sandbox Code Playgroud)
(注:如在评论中提到,你必须#define MAX_INT_LENGTH_IN_C 12考虑到最大的整数值,例如-2147483648用+/-,并提供余地'\0'末)
示例使用/输出
$ ./bin/memorystring
Enter num: 432198
memoryString: +432198 length: 7
$ ./bin/memorystring
Enter num: -432198
memoryString: -432198 length: 7
Run Code Online (Sandbox Code Playgroud)
仔细检查一下,如果您有其他问题,请告诉我。