c -如何使用scanf_s按ENTER键退出程序?



所以我做了一些谷歌搜索,发现使用代码:

#include <stdio.h>
void main()
{
char ch;
ch = fgetc(stdin);
if (ch == 'n')
{
printf("n");
}
else
{
printf("n");
}
}

确实做了我想要的,但是将这些代码行粘贴到我的其他项目中,有scanf_s似乎没有提示用户在'ch = fgetc(stdin)'处输入。我想知道是否有一种方法可以将ch = fgetc(stdin)更改为扫描码,以便它可以读取ENTER并退出程序。

大多数scanf说明符将在输入流中留下一个挂起的换行符。
因此紧跟在scanf之后,fgetc将消耗一个换行符。

我能想到的最好方法是使用扫描集%1[n]扫描单个换行符。然后扫描换行符以消耗挂起的换行符,并在所需输入之前扫描以获得前导换行符,表示输入完成并退出循环。

第二个循环使用fgets实现相同的效果。

#include <stdio.h>
#include <stdlib.h>
#define LINE 99
//stringify to use in format string
#define SFS(x) #x
#define FS(x) SFS(x)
int main ( void) {
char text[LINE + 1] = "";
char newline[2] = "";
int result = 0;
while ( 1) {
printf ( "enter text for scanfn");
scanf ( "%*[ tr]"); // scan and discard spaces, tabs, carriage return
if ( 1 == ( result = scanf ( "%1[n]", newline))) {
printf ( "tscanned leading newlinen");
break;
}
if ( 1 == ( result = scanf ( "%"FS(LINE)"[^n]", text))) {
//as needed parse with sscanf, strtol, strtod, strcspn, strspn, strchr, strstr...
printf ( "tscanned text: %sn", text);
scanf ( "%*[ tr]"); // scan and discard spaces, tabs, carriage return
if ( 1 == scanf ( "%1[n]", newline)) {
printf ( "tscanned trailing newlinen");
}
}
if ( EOF == result) {
fprintf ( stderr, "EOFn");
return 1;
}
}
while ( 1) {
printf ( "enter text for fgetsn");
if ( fgets ( text, sizeof text, stdin)) {
if ( 'n' == text[0]) {
printf ( "----newline onlyn");
break;
}
printf ( "----text is:%sn", text);
//as needed parse with sscanf, strtol, strtod, strcspn, strspn, strchr, strstr...
}
else {
fprintf ( stderr, "EOFn");
return 2;
}
}
return 0;
}

scanf不读取字符串后面的n,但您可以使用%c:

读取字符
#include <stdio.h>
int main() {
char c ; 
scanf("%c", &c);
if(c == 'n') {
// ...
}
return 0;
}

相关内容

  • 没有找到相关文章

最新更新