我的程序不接受使用getchar的c中的简单字符串
预期产出:我的程序不接受使用getchar的c中的简单字符串,c,arrays,string,C,Arrays,String,预期产出: int count0=0,count1=0,cnt=0; char str[200]; char ch; ch= getchar(); while(ch!='\0') { str[cnt]=ch; cnt++; } str[cnt]='\0'; printf("%s",str); 输出: shubham Your code didn't print anyt
int count0=0,count1=0,cnt=0;
char str[200];
char ch;
ch= getchar();
while(ch!='\0')
{
str[cnt]=ch;
cnt++;
}
str[cnt]='\0';
printf("%s",str);
输出:
shubham
Your code didn't print anything.
输入:
shubham
Your code didn't print anything.
您只接受一个字符,应该将
while()
替换为do-while()
shubham
上面的循环应该可以解决您面临的问题。您需要使用字符串末尾的ctrl
+@
输入空终止符。\include
int ch;
do
{
ch= getchar();
if(ch == EOF)
{
str[cnt] = '\0';
break;
}
else
str[cnt] = ch;
cnt++;
}while(ch != '\0');
#包括
#包括
int main()
{
int i=0,j=0,T;
T=getchar();
int-ch;
对于(i=0;iAwhile
循环是可以的。只需将getchar()
放入其中
使用int ch
而不是char ch
作为getchar()
通常返回257个不同值中的1个:0-255和EOF
(负值)。EOF
表示文件结束(或罕见的输入错误)
为什么不在循环中调用getchar()
?可能,您可以将while
替换为do while
,并使用此语句ch=getchar()在内部执行时执行操作。您只接受一个字符,循环从不停止。使用调试器,逐行运行代码。这始终是第一步。它会立即向您显示出错的地方。man getchar
告诉您其返回的类型是什么?(它不是char
)请注意,getchar()
返回一个int
,而不是char
;ch
应声明为int
,以确保它可以保存EOF
的值。此外,如果返回EOF
,则在后续调用getchar()时将返回该值
,导致无限循环,因为此代码不检查EOF
。这将导致此处的行为未定义,因为cnt
将继续递增,并且很快会出现越界访问。@DavidBowling对答案进行了更改。在本例中,getchar()
返回EOF
然后需要在ch
上的循环外执行检查,如果ch
是EOF
则str[]
需要以NULL
str[cnt]='\0'
终止。您现在可能会注意到如果EOF
是从getchar()返回的
,它的值存储在str[]
(并且str[]
然后不是空终止的)。@Gaurav仍然你的程序没有帮助int ch;do{ch=getchar();str[cnt]=ch;cnt++;}while(ch!='\0'| ch!=EOF);str[cnt]='\0';printf(“%s”,str)@SHUBHAMJANGAM现在应该可以了。我只想一次存储输入文本中的一个字符串并将其显示到控制台,但它需要多个字符串scanf(“%d\n”,&T);
-->
scanf(“%d”,&T);
注意在scanf()中使用尾随空格字符几乎总是错误的
格式化字符串。这会导致scanf()
在返回之前等待输入非空白字符,从而导致交互式输入出现问题。相反,要删除scanf()之后的换行符,请使用:int ch;while((ch=getchar())!='\n'&&ch!=EOF)
再次强调,必须是ch
beint
,而不是char
@DavidBowling现在我改进了代码bt,问题是当T的值为3::i/O->3 shubham###mahbuhs jshubham::预期的O/P->shubham##jsbuham…O/P->shubham###################mahbuhshere getchar in while正在吃T后面的空格,但是当我使用getchar而不是scanf时,它工作正常。在第一次调用scanf()
后,您必须从输入流中删除换行符。您可以使用我在最后(将其直接放在scanf()
行之后),或者您可以在此处执行getchar()
来删除\n
字符。循环是可移植清除至少包含换行符的输入流的标准方法。
size_t count;
for (count = 0; count < sizeof str - 1; count++) {
int ch == getchar();
if (ch == EOF || ch == '\n') {
break;
}
buf[count] = ch;
}
buf[count] = '\0';
puts(str);