Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么它忽略了第二个字符_C_Char - Fatal编程技术网

C 为什么它忽略了第二个字符

C 为什么它忽略了第二个字符,c,char,C,Char,我有以下代码: #include <stdio.h> #include <ctype.h> int main() { char x; printf("Program shows your name and check if the first letter is capital"); while (scanf_s("%c", &x) !=1 || getchar() !='\n') { if (islower(x

我有以下代码:

#include <stdio.h>
#include <ctype.h>

int main()
{
    char x;
    printf("Program shows your name and check if the first letter is capital");
    while (scanf_s("%c", &x) !=1 ||  getchar() !='\n')
    {
        if (islower(x))
        {
            printf("Name begins with a capital letter\n");
            while (getchar() != '\n')
                ;
        }
        else
        {
            printf("%c", x);
        }
        break;
    }
    while ((x = getchar()) != EOF)
    {
        printf("%c", x);
    }
        return 0;
}
#包括
#包括
int main()
{
字符x;
printf(“程序显示您的姓名并检查第一个字母是否大写”);
而(scanf_s(“%c”、&x)!=1 | | getchar()!=“\n”)
{
if(岛下(x))
{
printf(“名称以大写字母\n开头”);
而(getchar()!='\n')
;
}
其他的
{
printf(“%c”,x);
}
打破
}
而((x=getchar())!=EOF)
{
printf(“%c”,x);
}
返回0;
}
例如: 当我输入“Matthew”时,结果是“Mtthew”。怎么了?我不知道。 我试图在第一个“while”中改变几乎所有的事情,但我认为问题并不存在。有什么想法吗?

函数getChar()从输入流中删除一个字符,使其不再存在。通过在条件语句中使用它,它是:

  • 从流中获取角色(又称:删除它)
  • 比较一下,最后
  • 丢弃它(未将其保存在某处)
如果你重构你的代码来考虑这一点,那么我相信你的神秘字符会返回:-)/p>< p>函数GETCHARE()从输入流中移除一个字符,这样它就不再在它上面了。通过在条件语句中使用它,它是:

  • 从流中获取角色(又称:删除它)
  • 比较一下,最后
  • 丢弃它(未将其保存在某处)

如果重构你的代码来考虑这一点,那么我相信你的神秘字符会返回:-)

< p>将<<代码>改为 >

    while ((x = getchar()) != EOF && x != '\n')

编辑:并将
char x
更改为
int x
,因为
EOF
不能保证由
char
表示

    while ((x = getchar()) != EOF && x != '\n')

编辑:并将
char x
更改为
int x
,因为
EOF
不能保证由
char
表示。在进行以下更改时,您的程序工作时没有跳过字符:(请参阅行中的注释)

但是@J.Murray在回答中关于
getchar()
吃字符的评论是有效的。所以,尽管你的程序对我有用,但有些输入序列是不可用的


注意:使用
int
而不是
char
的原因是
getchar()
可以返回
EOF
,它==-1。
char
不能包含-1。

在进行以下更改时,您的程序运行时不会跳过字符:(请参阅行中的注释)

但是@J.Murray在回答中关于
getchar()
吃字符的评论是有效的。所以,尽管你的程序对我有用,但有些输入序列是不可用的


注意:使用
int
而不是
char
的原因是
getchar()
可以返回
EOF
,它==-1。
char
不能包含-1。

肯定不正确地使用了
scanf\u s(“%c”和&x)

fscanf_s函数与fscanf等价,不同之处在于c、s和[conversion说明符应用于一对参数(除非赋值抑制由*表示)。其中第一个参数与fscanf相同。该参数在参数列表中紧跟第二个参数,其类型为
rsize_t
,并给出该对的第一个参数指向的数组中的元素数。(C111dr§K.3.5.3.2 6)


可能还存在其他问题。

肯定不正确地使用了
scanf\u s(“%c”和&x)

fscanf_s函数与fscanf等价,不同之处在于c、s和[conversion说明符应用于一对参数(除非赋值抑制由*表示)。其中第一个参数与fscanf相同。该参数在参数列表中紧跟第二个参数,其类型为
rsize_t
,并给出该对的第一个参数指向的数组中的元素数。(C111dr§K.3.5.3.2 6)


其他问题可能存在。

3为该函数的循环,也许您应该考虑重写它,如果将它与EOF进行比较,则应该声明X为<代码> INT/C>。<代码> >不确定,但我认为在其他函数的循环中,StREST必须在BoeBase3中,而在该函数的循环中,也许您应该考虑重写它,如果将它与EOF进行比较,则应该声明X为<代码> INT/C>。。不确定,但我认为else之后的break必须在else块中
scanf_s("%c", &x, (rsize_t)1)