为什么这个代码打印" 1"所有投入?

时间:2016-10-20 14:17:19

标签: c return printf return-value scanf

#include <stdio.h>

int main(){
    char testChar;

    printf("%d\n", scanf("%c", &testChar));

    return 0;
}

我想要的只是打印扫描的字符数。但是,当我的所有输入都具有相同的输出时,即1。

3 个答案:

答案 0 :(得分:2)

scanf()返回成功扫描的项目数。因此,在所有运行中scanf()成功,因此您的程序打印1。

来自scanf()

  

成功时,这些函数返回输入项的数量   成功匹配并分配;这可能比提供的少   在早期匹配失败的情况下,甚至为零。

     

如果在输入结束之前到达,则返回值EOF   首次成功转换或匹配失败。 EOF也是   如果发生读取错误则返回,在这种情况下,错误指示符为   设置流(请参阅ferror(3)),并设置errno以指示   错误。

答案 1 :(得分:1)

scanf()  
   only scans your first character input and returns 1.

答案 2 :(得分:0)

您可以尝试此操作来打印从stdin读取的字符数。在循环中使用scanf

#include <stdio.h>
#include <stdlib.h>

int
main(void) {
    char testChar;
    int numchar = 0;

    printf("Enter characters, CTRL-C to end:\n");
    while (scanf("%c", &testChar) == 1) {
        numchar++;
    }

    printf("Number of characters scanned: %d\n", numchar);

    return 0;
}