C 将字符数组的内容向左移动一个位置

C 将字符数组的内容向左移动一个位置,c,C,我的课程软件开发有一个实验室,而且是C语言的新手,但我更了解Java。我试图将数组的内容向左移动一点,但输出似乎与用户输入相同。发现问题了吗 #include <stdio.h> int main(void) { char telephoneNumber[13]; int i; printf("Enter a telephone number [(xxx)xxx-xxxx]: "); scanf("%c", &telephoneNumber

我的课程软件开发有一个实验室,而且是C语言的新手,但我更了解Java。我试图将数组的内容向左移动一点,但输出似乎与用户输入相同。发现问题了吗

#include <stdio.h>

int main(void)
{
    char telephoneNumber[13];
    int i;

    printf("Enter a telephone number [(xxx)xxx-xxxx]: ");
    scanf("%c", &telephoneNumber);

    for (i = 0; i < 11; i++) {
        telephoneNumber[i] = telephoneNumber[i + 1];
    }

    printf("%c", telephoneNumber);
    return 0;
}
#包括
内部主(空)
{
字符编号[13];
int i;
printf(“输入电话号码[(xxx)xxx xxxx]:”;
scanf(“%c”和电话号码);
对于(i=0;i<11;i++){
电话号码[i]=电话号码[i+1];
}
printf(“%c”,电话号码);
返回0;
}
输入:
(902)494-9999


输出:
(902)494-9999

我对您的程序做了一些细微的更改,它对我来说就像预期的那样工作。 我不知道为什么它对你不起作用

#include <stdio.h>
#include <string.h>

int main(void)
{
    char telephoneNumber[20];
    int i;
    int len;

    printf("Enter a telephone number [(xxx)xxx-xxxx]: ");
    scanf("%19s", telephoneNumber);

    len = strlen(telephoneNumber);
    for (i = 0; i < len; i++)
    {
        telephoneNumber[i] = telephoneNumber[i + 1];
    }

    printf("%s\n", telephoneNumber);
    return 0;
}
#包括
#包括
内部主(空)
{
电话号码[20];
int i;
内伦;
printf(“输入电话号码[(xxx)xxx xxxx]:”;
scanf(“%19s”,电话号码);
len=strlen(电话号码);
对于(i=0;i
我做了两个改变:

  • 我将您的
    printf
    scanf
    格式更改为
    %s
  • 我将您的移位改为左循环,以操作字符串的实际长度(为了以防万一,我将其最大值增加到20)

有一点您可能不知道:C中的字符串以nul字符(通常不可见)结尾,表示为
'\0'
,将该字符与字符串的其余部分一起向左移动很重要。(但无论您是否意识到,您的代码都会改变它,所以这不是问题。)

是我,还是您的输入和输出相同?我想这就是你实际输出的。您能显示您期望的输入和输出吗?1)scanf(“%c”和电话号码)-->
scanf(“%13c”,电话号码)2)
用于(i=0;i<11;i++)
-->
用于(i=0;i<12;i++)
3)
printf(“%c”,电话号码)-->
printf(“%.12s”,电话号码)
两个
%c
%s
(您应该使用但不是)都需要相同的目标类型,a
char*
,您实际上传递的是
char(*)[13]
,在您的情况下解析为相同的地址(您很幸运),但类型不匹配,任何启用了适当警告的体面的c编译器都会告诉您这一点。此外,我还发现,输出可能来自发布的代码,这简直就是一个奇迹。在这段代码中,唯一最正确的是循环的实际移位,奇怪的是,这是您的问题的主题。您试图解决的真正问题是获取输入,然后去除除数字以外的所有内容吗?@BLUEPIXY
scanf(“%13c”
=>
scanf(“%12c”
),因为缓冲区的长度为13(这是我刚才删除的正确且被否决的答案)@蓝精灵:我明白了:那是不对的!因为答案提供了解决方案,所以我只会对此发表评论,而不是投反对票。可能是“回答noob问题+回答公牛**t站在一边”。没关系。今天我对更好的问题投了赞成票。谢谢你们。我总是从错误中吸取教训。在转换说明符中传递给scanf的数字是在空终止符之前存储到目标中的最大字符数,所以t应该是19:
scanf(“%19s”,电话号码)
@chqrlie-Yikes,对,谢谢。修复。(
scanf
糟透了。你能告诉我我从来没用过它吗?)