我是c programming
的新手。我已经创建了一个输入字母的程序,最后显示输入的字母..但它只显示最后的字母..请帮助..我知道它的简单问题,但我是初学者所以请帮助人..
#include<stdio.h>
int main()
{
char z;
int a;
printf("enter the no.");
scanf("%d",&a);
printf("the entered no. is:%d\n",a);
int i;
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%s",&z);
}
printf("the entered letters are:");
for(i=0;i<a;i++)
{
printf("%s\n",&z);
}
return 0;
}
答案 0 :(得分:2)
使用%c
扫描字母。要扫描多个字母,您可以使用char
数组:char z[10];
您尝试做的事情可以这样做:
char z[10]; // Take some max size array
...
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%c",&z[i]); // Scan the letters on each array position.
}
printf("the entered letters are:");
for(i=0;i<a;i++)
{
printf("%c\n",z[i]); //'printf' doesn't require address of arg as argument hence no `&` required
}
%s
参数用于扫描chars
字符串。
请注意chars
的字符串与chars
的数组之间的区别。 C中的chars
字符串需要以0
格式表示为\0
的ASCII字符char
终止,而char数组只是需要的字母集合不得以\0
终止。
当您尝试对printf
,strcpy
,strlen
等字符串执行某些操作时,差异变得更加重要。这些函数适用于字符串的空字符终止属性。
例如:strlen
计算字符串中的字符,直到找到\0
,找出字符串的长度。同样,printf
逐字符打印字符串,直到找到\0
字符。
<强>更新强>
忘记提及scanf
不是输入char
格式的好选择。请改用fgetc
,stdin
作为输入FILE流。
答案 1 :(得分:2)
问题:
您应该使用%c
(用于字符)而不是%s
(用于字符串)。
使用字符数组存储多个字符。阅读有关数组here的信息。
在第二个&
循环中从printf()
移除for
。
试试这个:
int main()
{
char z[10]; //can hold 10 characters like z[0],z[1],z[2],..
int a;
printf("enter the no.");
scanf("%d",&a);
printf("the entered no. is:%d\n",a);
int i;
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%c",&z[i]);
}
printf("the entered letters are:");
for(i=0;i<a;i++)
{
printf("%c\n",z[i]);
}
return 0;
}
答案 2 :(得分:2)
char z
只是一个角色的占位符。而且你在z
循环中编写了for
的内容。要接收更多字符,请使用其他人提及的char array
。
或者在您正在扫描它们的同一个循环中打印字符:
#include<stdio.h>
int main()
{
char z;
int a;
printf("enter the no.");
scanf("%d",&a);
printf("the entered no. is:%d\n",a);
int i;
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%s",&z);
printf("letter scanned:%c\n", z);
}
return 0;
}
答案 3 :(得分:2)
有关scanf的详细信息,请查看this。您已经给出了scanf("%s",&z);
%s
用于读取字符串(除了换行符char以及以null
char结尾的字符数组)。因此,如果你把它放在内部循环中,你就不会得到理想的结果。如果你想一次只读一个字符,请在这里用%c
来表示字符。
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%c",z+i);
}
答案 4 :(得分:1)
#include <stdio.h>
int main()
{
char *z;
int a;
printf("enter the no.");
scanf("%d",&a);
z = (char *) malloc(a);
printf("the entered no. is:%d\n",a);
int i;
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%c",z+i);
}
printf("the entered letters are:");
for(i=0;i<a;i++)
{
printf("%c\n",z);
}
return 0;
}
答案 5 :(得分:1)
代码中的第一个错误是您使用了&#34;%s&#34;而不是&#34;%c&#34;。第二是不可能在一个变量中存储多个值,而不是使用变量使用数组。第三个是你告诉用户输入他/她的字符数想要输入你不知道的。他们也可以输入1和100000也因此没有定义数组中的成员数。更好的是使用数组中特定数量的字符。
答案 6 :(得分:0)
最后我得到了答案谢谢你帮助stackoverflow的人简直摇滚......
#include<stdio.h>
#include<malloc.h>
int main()
{
int a;
char *z=(char *)malloc(sizeof(a));
printf("enter the no.");
scanf("%d",&a);
printf("the entered no. is:%d\n",a);
int i;
for(i=0;i<a;i++)
{
printf("enter the letters:");
scanf("%s",&z[i]);
}
printf("the entered letters are:\n");
for(i=0;i<a;i++)
{
printf("%c\n",z[i]);
}
return 0;
}