如何用C语言在数组中存储echo的输入
如果我要在终端中键入如何用C语言在数组中存储echo的输入,c,C,如果我要在终端中键入echo“1001”|/test 而test获取“1001”并将其存储到一个数组中,我该怎么做 在test.c中: #include <stdio.h> main() { int c, i, j; int a[4]; while(c = (getchar() != EOF)) { a[i++] = c; } for(j = 0; j < 5; j++ { printf("%d", a[j]); } } #包括
echo“1001”|/test
而test
获取“1001”并将其存储到一个数组中,我该怎么做
在test.c
中:
#include <stdio.h>
main() {
int c, i, j;
int a[4];
while(c = (getchar() != EOF)) {
a[i++] = c;
}
for(j = 0; j < 5; j++ {
printf("%d", a[j]);
}
}
#包括
main(){
int c,i,j;
int a[4];
而(c=(getchar()!=EOF)){
a[i++]=c;
}
对于(j=0;j<5;j++{
printf(“%d”,a[j]);
}
}
但是它不工作。您还没有初始化
i
变量,所以它是垃圾。此外,条件应该是,而((c=getchar())!=EOF)
我发现这个程序可以工作:
#include <stdio.h>
int main(int argc, char** argv)
{
int c, i = 0, j;
int a[4];
while((c = getchar()) != EOF && i < 4)
{
a[i++] = c;
}
for(j = 0; j < 4; j++)
{
printf("%c", a[j]);
}
printf("\n"); // Be nice to non-windows users :)
return 0;
}
#包括
int main(int argc,字符**argv)
{
int c,i=0,j;
int a[4];
while((c=getchar())!=EOF&&i<4)
{
a[i++]=c;
}
对于(j=0;j<4;j++)
{
printf(“%c”,a[j]);
}
printf(“\n”);//善待非windows用户:)
返回0;
}
您的原始程序有几处更改。初始化i
,限制读取的字符数,只输出4个字符(j<4
),并修复一些语法(缺少括号和int main(int argc,char**argv)
)。哦,还有(c=getchar())!=EOF
,因为您首先要存储角色,然后进行比较
我还将%d
更改为%c
,以便打印字符。如果需要,您可以将其更改回原来的位置,这取决于您实际希望程序生成的内容
i
初始化为0c = (getchar() != EOF)
意味着c是一个布尔值,而不是从输入中得到的字符。将其更改为:
(c = getchar()) != EOF
为什么要逐字读?读这行就行了
char line[50];
fgets(line, sizeof(line), fp);
// line now contains "1001\n". You can chop off the \n with the following line:
line[strlen(line)-1] = '\0';
两个优点;您错过了(3)EOF之前的数据中有5个字符,因此存在缓冲区溢出;(4)无法使用
%d
打印字符串;(5)如果将%d
更改为%s
,则没有以空结尾的字符串(因此,数组中至少需要6个字符和显式空终止符,或者至少需要5个字符和%.5s
,才能在输出中包含换行符)。@Jonathan Leffler:感谢您的修订。:PIgnore关于printf()
格式的注释;我误读了代码。+1:很好……这很合理(至少在非Windows机器上)以换行结束输出。但您选择了关键点-i=0
,while
条件,缓冲区溢出,打印格式不正确。欢迎使用堆栈溢出。请尽快阅读该页。请注意,通常说“它不工作”并没有多大帮助。你应该明确你看到的行为。在这种情况下,你(应该)打印了许多Control-a字符,无论你是否能看到它们。正如答案所指出的,你对i
未初始化,while
循环中的条件有问题(这是将Control-A存储在c
中,从而存储在字符串中)、缓冲区溢出和不正确的打印格式。好的;忽略printf()
格式注释-我误读了代码。正如我向其他人指出的那样-两点很好;您错过了(3)EOF之前的数据中有5个字符,因此您有缓冲区溢出和(4)无法使用%d
和(5)打印字符串。如果将%d
更改为%s
,则没有以空结尾的字符串(因此数组中至少需要6个字符和显式空结尾,或者至少需要5个字符和%5s
将换行包含在输出中)。好的,在这个非常具体的输入数据中-当然。在其他情况下,我们可以发现许多其他潜在问题,但我认为我们不应该。但我不明白您在本文中对%s的含义-它不是字符串,而是int数组。我似乎无法读取;我非常习惯于读取int
,然后用char
e> getchar()我没有注意到它实际上在干什么……我(非常)糟糕。