programing

C에서 단일 문자를 스캔하는 방법

bestcode 2022. 8. 21. 19:40
반응형

C에서 단일 문자를 스캔하는 방법

C: 사용자로부터 char를 취득하려고 합니다.scanf프로그램을 실행하면 사용자가 아무것도 입력하기를 기다리지 않습니다.

코드는 다음과 같습니다.

char ch;
printf("Enter one char");
scanf("%c", &ch);
printf("%c\n",ch);

왜 안 되지?

%c선행에 (를 들어에서) 뉴라인이, "" (": "Newline")는 "Newline"을 사용합니다.scanf콜이 즉시 소비됩니다.

이 문제를 회피하는 방법 중 하나는 변환 지정자 앞에 공백을 넣는 것입니다.

scanf(" %c", &c);

형식 문자열의 공백은 다음을 나타냅니다.scanf 번째 이 없는는 공백이 아닌 첫 . 을 사용하다%c변환 지정자.

피하세요, 피하세요.scanf()고통받을 가 없어 그것을 사용하는 것은 수고를 들일 가치가 없다.

참조: 왜 모두 scanf를 사용하지 말라고 합니까? 대신 무엇을 사용하면 좋을까요?

scanf()입력 스트림에 남아 있는 공백 문자는 무시됩니다. 더 많은 입력을 읽어야 할 경우 어떻게 해야 합니까?★★★★★★★★★★★★★★★★★★:

#include <stdio.h>

int main(void)
{
   char ch1, ch2;

   scanf("%c", &ch1);  /* Leaves the newline in the input */
   scanf(" %c", &ch2); /* The leading whitespace ensures it's the
                          previous newline is ignored */
   printf("ch1: %c, ch2: %c\n", ch1, ch2);

   /* All good so far */

   char ch3;
   scanf("%c", &ch3); /* Doesn't read input due to the same problem */
   printf("ch3: %c\n", ch3);

   return 0;
}

세 번째 scanf()는 선행 공백으로 동일한 방법으로 수정할 수 있지만, 항상 위와 같이 간단하지는 않습니다.의 큰 '먹다' 입니다.scanf()는 입력 스트림의 입력이 포맷과 일치하지 않는 경우 해당 입력을 폐기하지 않습니다.를 들어, '먹다'를요.abc잠 an an int를 들면, 다음과 같습니다.scanf("%d", &int_var);abc읽고 폐기해야 합니다.★★★★★★★★★★★★★★★★★★:

#include <stdio.h>

int main(void)
{
    int i;

    while(1) {
        if (scanf("%d", &i) != 1) { /* Input "abc" */
            printf("Invalid input. Try again\n");
        } else {
            break;
        }
    }

    printf("Int read: %d\n", i);
    return 0;
}

다른 는 섞이다scanf() ★★★★★★★★★★★★★★★★★」fgets() ★★★★★★★★★★★★★★★★★★:

#include <stdio.h>

int main(void)
{
    int age;
    char name[256];
    printf("Input your age:");
    scanf("%d", &age); /* Input 10 */
    printf("Input your full name [firstname lastname]");
    fgets(name, sizeof name, stdin); /* Doesn't read! */
    return 0;
}

의 콜fgets()이전 scanf() 호출이 남긴 새 회선이 읽혀지고 새 회선이 발견되면 fgets()가 입력 읽기를 종료하기 때문에 입력을 기다리지 않습니다.

에도 비슷한 있습니다.scanf()그래서 피하는 것이 좋습니다.

그럼, 대안이 뭐죠?대신 다음 방법으로 함수를 사용하여 단일 문자를 읽습니다.

#include <stdio.h>

int main(void)
{
    char line[256];
    char ch;

    if (fgets(line, sizeof line, stdin) == NULL) {
        printf("Input error.\n");
        exit(1);
    }

    ch = line[0];
    printf("Character read: %c\n", ch);
    return 0;
}

시 주의해야 할 1개fgets() bufferinut에 줄 .바람직하지 않은 경우는, 다음의 순서로 삭제할 수 있습니다.

char line[256];

if (fgets(line, sizeof line, stdin) == NULL) {
    printf("Input error.\n");
    exit(1);
}

line[strcpsn(line, "\n")] = 0; /* removes the trailing newline, if present */

이거면 될 것 같아

int main(){
char c;
scanf(" %c",&c);
printf("%c",c);
return 0;
}

여기 제가 공유하고 싶은 비슷한 것이 있습니다.

Visual Studio에서 작업하는 동안 다음과 같은 오류가 발생할 수 있습니다.

'scanf': 함수 또는 변수가 안전하지 않을 수 있습니다.사용을 검토하다scanf_s대신.폐지 기능을 디세블로 하려면 , 를 사용합니다._CRT_SECURE_NO_WARNINGS

이를 방지하려면 다음 형식으로 작성해야 합니다.

단일 문자는 다음과 같이 읽을 수 있습니다.

char c;
scanf_s("%c", &c, 1);

Null이 아닌 종단 문자열의 여러 문자를 읽을 경우 정수가 너비 지정 및 버퍼 크기로 사용됩니다.

char c[4];
scanf_s("%4c", &c, _countof(c));

fgets도 getchar도 문제를 해결하는데 효과가 없습니다.유일한 회피책은 scanf scanf % %c",ch)를 사용하는 동안 %c 앞에 공간을 유지하는 것입니다. //만 작동합니다.

다음 fgets 또한 작동하지 않습니다.

char line[256];
char ch;
int i;

printf("Enter a num : ");
scanf("%d",&i);
printf("Enter a char : ");

if (fgets(line, sizeof line, stdin) == NULL) {
    printf("Input error.\n");
    exit(1);
}

ch = line[0];
printf("Character read: %c\n", ch);

대신 getchar()를 사용해 보겠습니다.

구문:

void main() {
    char ch;
    ch = getchar();
}

나한테 효과가 있었던 유일한 암호는

scanf(" %c",&c);

나도 같은 문제를 겪고 있었는데, 오직 한 명의 캐릭터만 있었다.1시간의 랜덤 테스트 후 아직 문제를 보고할 수 없습니다.C는 현재 키보드에서 단일 문자를 검색하는 방탄 기능을 가지고 있을 것으로 생각되며, 가능한 해킹 방법은 배열되어 있지 않습니다.그냥...

scanf put 전fflush(stdin);버퍼를 클리어합니다.

유효한 변수를 사용해야 합니다. ch는 이 프로그램에 유효한 변수가 아닙니다.사용하다char Aaa;

char aaa;
scanf("%c",&Aaa);

테스트 완료 후 동작.

컴파일러가 공백을 무시하도록 %c 변환 지정자 앞에 공백을 제공합니다.프로그램은 다음과 같이 기술할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char ch;
    printf("Enter one char");
    scanf(" %c", &ch); /*Space is given before %c*/
    printf("%c\n",ch);
return 0;
}

대신 문자열 사용char맘에 들다

char c[10];
scanf ("%s", c);

잘 될 것 같아.

언급URL : https://stackoverflow.com/questions/13542055/how-to-do-scanf-for-single-char-in-c

반응형