2016-07-04 39 views
-2

我一直试图用C一两件事:字符C和Java

int main(){ 

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

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

    return 0; 
} 

一切似乎是罚款只是如果我把连两个字符在输入它取出第一个字符。例如,如果我输入“as”,它会给我“一个”在通道。为什么是这样,如果我输入多个字符,任何人都可以告诉我要输入错误。我怎样才能做到这一点?先谢谢你。

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

+2

阅读所有输入,计算它的长度,如果错误返回错误。 –

+1

你读了一个字符,那么你感到惊讶,你得到一个字符?有多好奇... – meskobalazs

+2

对不起,stackoverflow不是您放弃要求和其他人为您丢弃代码的服务。 – GhostCat

回答

-1

在C中使用“%c”格式化程序时,如果您想要读取任何必须创建char指针的任何内容,请调用malloc函数并使用“%s”格式化程序读取。 例子:

include <string.h> 
include <stdio.h> 
include <stdlib.h> 
int main(){ 
char* ch = malloc(100*sizeof(char)); 
if(ch != NULL){ 
    printf("Enter the string"); 
    scanf("%99s",ch) 
    printf("The entered string is %s\n",ch); 
    free(ch); 
} 
else 
    printf("Malloc failed!"); 
return 0; 
} 
+0

检查'malloc'返回''free''malloc'内存... – LPs

+0

另外,不要在C中投入'malloc'。 – meskobalazs

+1

另外,不要'scanf(“%s”)'不指定长度限制。使用例如'scanf(“%99s”)'。 – davmac

1

至于C的疑虑:请修改代码以下列方式,编译并运行它,你会看到一个不言自明的回答:无论你有多少个字符类型后因为%c格式说明符和目标变量ch,所以它们在stdin缓冲区中累积,但只有第一个字符会一次读入您的程序(或通过)。

#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; 
} 

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

+0

对不起,我误解了标准。 : - /我读了错误函数的规则。 – 2501

+0

@ 2501否,它可以返回EOF或匹配项目的数量。 “scanf函数在 任何转换之前发生输入故障时返回宏EOF的值。否则,scanf函数将返回分配的输入项的数量,在事件中可能少于规定的数量甚至为零的早期匹配失败。“在'%c'的情况下,我相信这意味着上述答案中的代码是很好的,因为它不能不匹配。 – davmac

0

在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(); 
     } 
    } 
}