我的程序不接受使用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;iA
while
循环是可以的。只需将
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
be
int
,而不是
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);