我正在搞乱下面的功能,我想在用户输入DOT字符时结束输入捕获。似乎getche()
没有做它想要做的事情:
void Encode(FILE *fp)
{
char chWord[100];
char *chP;
printf("Enter a word or a sentence, close it by a \".\"\r\n");
scanf("%s",chWord);
if (chWord != '.')
{
for (chP = chWord; *chP != '\0'; chP++) //to print each digit till end of string \0
{
printf("%d ",*chP+10);
fprintf(fp, "%d ",*chP+10);
}
}
}
更新
似乎我不够清楚。我想要做的是当用户输入DOT时,它应该像按ENTER键一样,所以程序进入下一步。某种模拟ENTER键。
答案 0 :(得分:3)
if (chWord != '.')
应该是
if (*chWord != '.')
您正在将char指针与char进行比较,而不是将char与另一个char进行比较。
请注意,此代码的写入方式输入“.123”将跳过打印段。不确定这是否适合你。
答案 1 :(得分:3)
scanf
函数族接受(负)字符集作为格式说明符。
您可以scanf("%[abc]", chWord);
只接受由字母abc组成的字符串。
您还可以指定不接受哪些字符。因此scanf ("%[^.]", chWord);
将接受由除了点之外的任何内容组成的字符串。
修改强>
我忘了提到,点将保留在输入流缓冲区中,所以要在scanf
本身期间读取并忽略它(而不是刷新缓冲区或执行getchar
),将其添加到格式字符串的末尾。即:
scanf ("%[^.].", chWord);
答案 2 :(得分:1)
好的,根据您的更新退出整个答案......
答案是没有,没有办法用scanf或者标准C中的任何内容做你想做的事情。你要做的是具体的平台(也可能是编译器)。
如果你想将'.'
视为输入键,那么你必须自己做魔术。所以,既然你没有提到你是否使用任何特定的操作系统或编译器,我会给你第一个想到的例子。
适用于Windows MS VS:
#include <Windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char key = 0;
int counter = 0;
char chWord[100] = {0};
while(counter < 100) {
while(!_kbhit()) { //While no key has been hit
Sleep(1); //Sleep for 1 ms
}
key = _getch(); //Get the value of the key that was hit
if(key == '.') //if it was a .
break; //act as if it were an "enter" key and leave
else
chWord[counter] = key;
counter++;
}
chWord[99] = '\0';
printf("The string was %s\n", chWord);
return 0;
}