C和Java中的字符

C和Java中的字符,java,c,Java,C,我一直在用C语言尝试一件事: int main(){ char ch; printf("Enter the character"); scanf(" %c",&ch); printf("The entered character is %c\n",ch); return 0; } 一切似乎都很好,只要我在输入端输入两个字符,它就会去掉第一个字符。例如,如果我输入“as”,它将在ch中给我一个“a”。为什么会这样?如果我输入多个字符,谁能告诉我我想给一个

我一直在用C语言尝试一件事:

int main(){

   char ch;
   printf("Enter the character");
   scanf(" %c",&ch);

  printf("The entered character is %c\n",ch);

   return 0;
}
一切似乎都很好,只要我在输入端输入两个字符,它就会去掉第一个字符。例如,如果我输入“as”,它将在ch中给我一个“a”。为什么会这样?如果我输入多个字符,谁能告诉我我想给一个错误。我该怎么做?先谢谢你

如果可能的话,我想在Java中做同样的事情。

在使用“%C”格式化程序的C中,一次只能打印一个字符,如果要读取任何内容,必须创建一个字符指针,调用malloc函数并使用“%s”格式化程序读取。 例如:

包括
包括
包括
int main(){
char*ch=malloc(100*sizeof(char));
如果(ch!=NULL){
printf(“输入字符串”);
扫描频率(“%99s”,ch)
printf(“输入的字符串是%s\n”,ch);
免费(ch);
}
其他的
printf(“Malloc失败!”);
返回0;
}

就C而言:请按以下方式修改代码,编译并运行它,您将看到一个不言自明的答案:无论您依次键入多少个字符,它们都会累积在
stdin
缓冲区中,但一次(或一次)只会将第一个字符读入程序,由于
%c
格式说明符和目标变量
ch

#include <stdio.h>
int main(){
   char ch;
   printf("Eneter the character:\n");
   while(scanf(" %c",&ch) != EOF){
      printf("The entered character is %c\n",ch);
   }
   return 0;
}
#包括
int main(){
char ch;
printf(“输入字符:\n”);
while(scanf(“%c”,&ch)!=EOF){
printf(“输入的字符是%c\n”,ch);
}
返回0;
}

要结束程序执行,您应该输入
EOF
(control-D)。

在java中,您可以这样做

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {

            String str = sc.next();
            if (str.length() > 1)
                System.out.println("Length exceeded");
            else
                System.out.println("Char: " + str);

        } catch (Exception e) {

        } finally {
            sc.close();
        }
    }
}

读取所有输入,计算其长度,如果错误则返回错误。您读入一个字符,然后您会惊讶地发现您得到了一个字符?真奇怪……对不起,stackoverflow不是一种您删除需求而其他人为您删除代码的服务。请在中搜索
Scanner
Java@J我不是在找服务。我试了又试,但找不到。它被称为必需的帮助,这就是堆栈溢出的目的。不管怎样,这是我自己做的提示,这是需要帮助的。请检查
malloc
return和
free
the
malloc
ated memory…同时,不要在C中使用
malloc
。此外,在未指定长度限制的情况下,不要使用
scanf(“%s”)
。使用例如
scanf(“%99s”)
。谢谢大家,我已经编辑了。很抱歉,我误读了标准。:/我读取了错误函数的规则。@2501否,它可以返回EOF或匹配项的数目。如果在任何转换之前出现输入失败,scanf函数将返回宏EOF的值。否则,scanf函数将返回分配的输入项的数量,如果早期匹配失败,该数量可能会小于规定数量,甚至为零在
%c
的情况下,我相信这意味着上面答案中的代码很好,因为它不能不匹配。
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {

            String str = sc.next();
            if (str.length() > 1)
                System.out.println("Length exceeded");
            else
                System.out.println("Char: " + str);

        } catch (Exception e) {

        } finally {
            sc.close();
        }
    }
}