2012-09-02 19 views
1

运行过程中一个特殊的字符串在我的C代码,我给出以下字符串作为输入:输入用C

"c:\tc\bin\a c j k.jpg" 

我试图读取与scanf函数的输入,但它失败(通过输入带或不带引号),我正在寻找其他解决方案。

我的代码如下:

char keytext[16],zzz,source[100],dest[100]; 
short int a; 
size_t readcount; 

clrscr(); 
printf("input the key text(max 16 characters):"); 
scanf("%s",&keytext); 

printf("input file name:"); 
scanf("%s",&source); 

/*fgets(source,100,stdin); 
namelen=strlen(source); 
if(source[namelen-1]=='\n') 
source[namelen-1]='\0';*/ 

printf("output file name:"); 
scanf("%s",&dest); 
+0

是否将'C:\ tc \ bin \ a c j k.jpg'视为单个字符串? – hmjd

+0

你能给我们更详细的解释吗? – fasked

+0

@hmjd是的,我要去读那个文件的内容 – user1026137

回答

1

格式说明%s将停止食用输入遇到的第一个空格字符的时候,所以它只会读,直到C:\tc\bin\a末。要阅读到k.jpg您可以使用扫描集:

char input[128]; 
if (1 == scanf("%127[^\n]", input)) 
{ 
} 

格式说明"%127[^\n]"手段读取直到下一个换行符,但不超过127个字符,以防止缓冲区溢出。在使用其输出之前,您应该检查返回值scanf(),它会返回所做的分配数量。

+0

字符\ t和\ b和\ a在那个字符串里怎么样 – user1026137

+0

不是字符串文字的一部分,它们是输入的,被复制到'input'数组中。 – hmjd

+0

对不起,它不起作用 – user1026137

0

scanf函数%s specificator期望字符指针char *。但是您将指针传递给char char **的指针。 为了解决它使用下面的代码来代替:

scanf("%s", keytext); 
scanf("%s", source); 
scanf("%s", dest); 

注意,它不需要&符号。 如果要使用空格读取整个字符串,可以使用fgets函数。

fgets(keytext, sizeof(keytext), stdin); 
fgets(source, sizeof(source), stdin); 
fgets(dest, sizeof(dest), stdin); 
+0

但是这不能解决用白色空间扫描的OP问题。 – Rohan

+0

@fasked如果我在使用scanf进行第一次输入之后使用fgets,它将无法工作。 – user1026137

+0

@ user1026137我找到了你!在使用'scanf'流后保留'\ n'符号。您需要清除流。在'fgets'之前尝试'scanf(“%* [^ \ n]”)'。 – fasked