我遇到以下代码的问题,我不知道为什么会这样,所以我将不胜感激。
问题如下:我必须读取两个变量,一个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之前添加空格,使代码顺利运行。谢谢。
答案 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正在寻找的第二个参数,所以它会挂起等待更多的输入。