打印字符串填充C中的循环?

时间:2017-09-09 14:14:37

标签: c arrays loops

我是C的新手并且正在尝试学习打印字符串和数组的单个元素。

在main函数中,我创建了一个包含5个字符的char数组,并且能够打印字符串。我也可以打印数组的1个元素。一切正常。

然后我创建了一个函数,它有一个for循环来填充一个包含26个可用插槽的数组,并且想要做同样的事情,打印整个字符串然后只打印它的一个元素。

当我的程序执行时,它应该打印: 你好 Ø ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ(这应该打印两次,一次用于for循环,然后一次当我尝试打印字符串时) ç

然而,当我这次尝试打印字符时,我遇到了错误,我能看到的唯一区别就是我初始化数组的方式。我不明白它的区别以及为什么它会破裂。它与for循环的范围有关吗?我也尝试使char数组静态,但这也不起作用。 任何人都可以帮忙吗?

这是我的代码

我是C的新手并且正在尝试学习打印字符串和数组的单个元素。

在main函数中,我创建了一个包含5个字符的char数组,并且能够打印字符串。我也可以打印数组的1个元素。一切正常。

然后我创建了一个函数,它有一个for循环来填充一个包含26个可用插槽的数组,并且想要做同样的事情,打印整个字符串然后只打印它的一个元素。

当我的程序执行时,它应该打印: 你好 Ø ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ(这应该打印两次,一次用于for循环,然后一次当我尝试打印字符串时) ç

然而,当我这次尝试打印字符时,我遇到了错误,我能看到的唯一区别就是我初始化数组的方式。我不明白它的区别以及为什么它会破裂。它与for循环的范围有关吗?我也尝试使char数组静态,但这也不起作用。 任何人都可以帮忙吗?

void mystring()
{

    char s[26];
    for(char ch = 'A'; ch < 'Z'; ch++)
    {
        int i = 0;
        s[i] = ch;
        printf("%c", s[i]);
        i++;
    }

    printf("\n%s\n", s);
    printf("%c", s[2]);

}

int main()
{
    char mystr[5] = "Hello";
    printf("%s\n", mystr);
    printf("%c\n", mystr[4]);

    mystring();
}

4 个答案:

答案 0 :(得分:1)

  1. 字符串”没有null终结符,我写“ strings ”因为它们实际上不是字符串根据 string 的定义。

  2. 您的i变量始终为0,只需使用简单的公式ch - 'A'即可获得正确的索引。

  3. char mystr[5] = "hello";空间不足,您需要为终止'\0'分配空间。

  4. 要修复代码,您可以执行此操作

    char s[27];
    for (int ch = 'A'; ch <= 'Z'; ++ch) {
        s[ch - 'A'] = ch;
    }
    s[26] = '\0';
    

    char mystr[6] = "hello";
    

答案 1 :(得分:1)

首先,您应该在i循环之外声明for值,否则i++命令无效,因为i始终为0

在C 字符串中是具有char元素的数组,因此在这些容器的末尾应始终放置null字符。因此,为了具体而言,您需要增加1数组的大小(27而不是26),并在字符串的最终位置增加s[26] = '\0';

答案 2 :(得分:0)

目前,我看到的主要错误是

for(char ch = 'A'; ch < 'Z'; ch++)
    {
        int i = 0;
        s[i] = ch;
        printf("%c", s[i]);
        i++;
    }

您希望在循环外移动声明和初始化语句(int i = 0)。现在,它每次都将i重置为0(实际上,可能会因为它尝试声明一个具有相同名称的变量而给你错误)

答案 3 :(得分:0)

我要评论你的代码。希望它有所帮助。

void mystring()
{

    char s[26];//you need one extra space for the null terminating char, so it should be "char s[27]"
    for(char ch = 'A'; ch < 'Z'; ch++)//if you want to print 'Z' as well, this should be "ch <= 'Z'", otherwise it stops at 'Y', which is the last char less than 'Z'
    {
        int i = 0;//you should declare this i before the loop, along with your char array. The way you're doing it right now, on every loop iteration you redeclare i and give it the value 0, meaning you're just filling the first position of your char array over and over
        s[i] = ch;
        printf("%c", s[i]);
        i++;
    }
    //s[26] = '\0'; //you should add this line <--remember, strings in C are null-terminated
    printf("\n%s\n", s);
    printf("%c", s[2]);

}

int main()
{
    char mystr[5] = "Hello";//strings in C are null terminated so this should have an extra space "char mystr[6]"
    printf("%s\n", mystr);
    printf("%c\n", mystr[4]);

    mystring();
}