循环遍历C中的数组

时间:2012-01-05 15:20:44

标签: c arrays for-loop count

想知道是否有人可以向我解释这个问题?我有一个程序要求用户输入一个句子。然后程序将用户输入读入数组并将所有元音更改为$符号。我的问题是for循环是如何工作的?初始化char c = 0时;这不意味着数组元素是一个int?我无法理解它是如何运作的。

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

int main(void)
{
char words[50];
char c;

printf("Enter any number of words: \n");
fgets(words, 50, stdin);

    for(c = 0; words[c] != '\n'; c++)
    {
            if(words[c] =='a'||words[c]=='e'||words[c]=='i'||words[c]=='o'||words[c]=='u')
            {
                words[c] = '$';
            }
    }
printf("%s", words);

return 0;
}

5 个答案:

答案 0 :(得分:3)

代码将c视为整数变量(在C中,char基本上是一个非常窄的整数)。在我看来,将它声明为int(也许是unsigned int)会更清晰。但是,鉴于words长度最多为50个字符,char c工作正常。

关于循环:

  1. c = 0c初始化为零。
  2. words[c] != '\n'检查 - 在开始时和每次迭代后 - 当前字符(words[c])是否为换行符,如果是,则停止。
  3. 每次迭代后,
  4. c++会增加c

答案 1 :(得分:1)

阵列就像一座建筑物,你有几个楼层,每个楼层都有一个号码。

在1楼生活约翰。 在2楼,迈克尔生活。

如果你想去Jonh公寓,你可以按电梯上的1。如果你想去迈克尔,你按2。

与数组相同。数组中的每个位置都存储一个值,在本例中为字母。

每个职位都有一个相关的指数。第一个位置是0。

如果要访问数组的位置,请使用数组[position],其中position是要访问的数组中的索引。

变量c保持被激活的位置。当您执行单词[c]时,您将访问数组中的c nt位置并检索其值。

将单词设为cool

word[1]会产生oword[0]会产生c

要确定单词的结尾,可以在数组的最后位置设置caracter \n

答案 2 :(得分:0)

实际上,charint是隐式转换的。

在这种情况下,您可以将char视为较小的intsizeof(char) == 1,因此它小于int,这可能是它被使用的原因。以编程方式,在这种情况下没有区别,除非输入字符串很长,在这种情况下char将在int之前溢出。

答案 3 :(得分:0)

数字文字(例如您的0)与char类型的变量兼容。实际上,即使是用单引号括起来的字符文字(例如'\n')也属于int类型,但在分配或与另一个char进行比较时会隐式转换为char

只要前者不超出字符的范围,数字文字就可以与字符文字互换。

以下内容应导致编译器警告:

char c = 257;

然而这不会:

char c = 127;

答案 4 :(得分:0)

char是C是一个整数类型,shortintlonglong long(以及许多其他类型):

它被定义为您正在编译的机器上的最小可寻址单元,通常为8位,这意味着它可以保存-128到127的值。而无符号字符可以保存0到255的值。

它在上面作为迭代器起作用,因为它将始终在50之前停止并且它可以保存最多127的值。而int类型通常可以容纳最多2,147,483,647的值,但是占用4倍机器中的空间为8位字符。 int仅保证在C中至少为16位,这意味着对于unsigned int,值介于-32,768和32,767或0 - 6,5535之间。

所以你的循环只是访问数组中的元素,一开始就像words[0]一样查看第一个字符,然后words[1]查看下一个字符。因为你使用的是char,我假设你的机器上有8位,因为这很常见。你的char将足以存储你的循环的迭代器,直到它超过127.如果你读取超过127个字符(而不是只有50个)并使用char迭代你会遇到奇怪的问题,因为char不能保持128并将循环到-128。导致您访问最有可能导致分段错误的words[-128]