在if比较中将+识别为'+'的问题

时间:2016-03-23 19:48:48

标签: c

我遇到以下代码的问题,我不知道为什么会这样,所以我将不胜感激。

问题如下:我必须读取两个变量,一个char和一个int,以便在一个文件中运行。当我输入其中一个('+')时,程序不会将其识别为'+'的实际符号,而是作为其他内容而程序永远不会输入所需的if。但是,如果我改变if以识别另一个字符(如'a'),程序运行正常。我试图用两种方式解决它:一种是使用('+'),另一种是使用ASCII代码(43)。他们都没有工作。

这是我的代码:

char opC;
printf("%c",43); //this test ensures that 43 is recognized as '+'

scanf("%c %d",&opC, &opN);

switch(opC) {

case(43): lseek(fd,opN,SEEK_CUR); break; //the program never enters this loop

所以我的复制粘贴不完整,这段代码确实在while循环中。

while(end!=SIM) {
scanf(" %c %d",&opC, &opN);

switch(opC) {
    case('+'): lseek(fd,opN,SEEK_CUR); break;
    case('-'): lseek(fd,-opN,SEEK_CUR); break;
    case('i'): lseek(fd,opN,SEEK_SET); break;
    case('f'): lseek(fd,-opN,SEEK_END); break;
    case('r'): read(fd,aux,opN); strcat(out,aux); break;
    case('s'): if(opN==0) end=SIM; break;

}      
}

我曾试图放一个getchar();作为循环的起始指令,但输出错误。

解决问题的方法是在%c之前添加空格,使代码顺利运行。谢谢。

1 个答案:

答案 0 :(得分:1)

当我输入以下内容时运行:

+ 7

在7之后回车。

#include <stdio.h>

int main(void) {
    char opC;
    int opN;

    scanf("%c %d\n", &opC, &opN); /* you are reading + and a number */

    switch(opC) {

    case('+'):  /* 43 works fine too */
        printf("Here %d\n", opN); 
        break;
    }
    printf("Done\n");
    return 0;
}

我明白了:

Here 7
Done

我猜测基本问题是你试图提供+而没有scanf正在寻找的第二个参数,所以它会挂起等待更多的输入。