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;
}
一些额外的想法:
- 你可能想看看 string.h
- 如果要保留 char 数组,则需要防止超出数组的大小
- 添加一些关于您期望您的程序做什么、要求是什么、示例输入、输出等的简介将有助于从社区获得更好的答案
对于根据 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
.
程序输出结果同上
我正在尝试制作一个简单的程序,它将读取一个字符串并将其连同其中的字符数一起打印出来。
字符数似乎没有问题,但它不会打印完整的字符串。无论出于何种原因,它只会打印第二个字符。我一直在检查我的代码,但我仍然不明白为什么会这样。
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;
}
一些额外的想法:
- 你可能想看看 string.h
- 如果要保留 char 数组,则需要防止超出数组的大小
- 添加一些关于您期望您的程序做什么、要求是什么、示例输入、输出等的简介将有助于从社区获得更好的答案
对于根据 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
.