C初学者问题:Array is not printing

C beginner question: Array is not printing

我正在尝试制作一个简单的程序,它将读取一个字符串并将其连同其中的字符数一起打印出来。

字符数似乎没有问题,但它不会打印完整的字符串。无论出于何种原因,它只会打印第二个字符。我一直在检查我的代码,但我仍然不明白为什么会这样。

If I input: abcdef

It will print out: 1 b 2 3 4 5 6

Instead of the intended: a 1 b 2 c 3 d 4 e 5 f 6

#include <stdio.h>

int main()
{
    char c;
    char str[0] = {};
    int i;
    int charcount;

    charcount = 0;

    for (i = 0; (c = getchar()) != '@' && c != '\n'; i++) {
        c = str[i];

        charcount++;

        printf("%c %d \n", str[i], charcount);

        //if(charcount > 80)
        //  printf("%d", z[i]);
    }

    return 0;
}

感谢任何帮助。谢谢

您有一个长度为零的变量 str,您尝试访问其中的各种元素(但它有 none,所以这是未定义的行为)

干脆去掉,直接用c

#include <stdio.h>

int main()
{
  char c;
  int i;
  int charcount;

  charcount = 0;

  for (i = 0; (c = getchar()) != '@' && c != '\n'; i++) {
    charcount++;
    printf("%c %d \n", c, charcount);
  }

  return 0;
}

我把你的问题理解为你想要存储输入到数组中的字符,并在你运行时将它们打印出来。您想要为数组指定一个初始大小(我选择了 99),然后在进行时向数组添加字符。您可以跟踪长度,以便知道 "end" 在哪里。在 C 语言中有更好的方法来管理字符串数据,但在这里。

#include <stdio.h>

int main()
{

  char c;
  char str[99] = {};
  int i;
  int charcount;

  charcount = 0;

  for (i = 0; (c = getchar()) != '@' && c != '\n'; i++) {
//    c = str[i];
str[i] = c;

    charcount++;

    printf("%c %d \n", str[i], charcount);

    //if(charcount > 80)
    //  printf("%d", z[i]);
  }

return 0;
}

一些额外的想法:

  1. 你可能想看看 string.h
  2. 如果要保留 char 数组,则需要防止超出数组的大小
  3. 添加一些关于您期望您的程序做什么、要求是什么、示例输入、输出等的简介将有助于从社区获得更好的答案

对于根据 C 标准的初学者,不带参数的函数 main 应声明为

int main( void )

这个声明

char str[0] = {};

有两个方面是无效的。数组大小应大于零。并且初始化数组的大括号不能为空。

实际上这个数组是多余的,因为你要做的只是输出输入的字符。

这个作业

c = str[i];

即使正确声明了数组也没有意义,因为输入的字符被数组的(不存在的)元素覆盖。

变量 c 本身的类型应该是 int.

如果您只需要执行此操作

I'm trying to produce a simple program which will read a string and print it along with the number of characters in it.

那么程序可以通过下面的方式查找例子

#include <stdio.h>

int main(void) 
{
    size_t i = 0;

    for ( int c = getchar(); c != EOF && c != '\n' && c != '@'; c = getchar() )
    {
        ++i;
        printf( "%c %zu ", c, i );
    }
    putchar( '\n' );

    return 0;
}

如果进入

abcdef

那么输出将是

a 1 b 2 c 3 d 4 e 5 f 6

如果您想使用字符数组并将输入的字符存储在数组中,那么程序可以看起来像

#include <stdio.h>

int main(void) 
{
    enum { N = 100 };
    char s[N];
    int c;

    for ( size_t i = 0; i < N && ( c = getchar( ) ) != EOF && c != '\n' && c != '@'; i++ )
    {
        s[i] = c;
        printf( "%c %zu ", s[i], i + 1 );
    }
    putchar( '\n' );

    return 0;
}

如输入abcdef.

程序输出结果同上