scanf를 사용하여 공백을 어떻게 입력 할 수 있습니까?
다음 코드를 사용하십시오.
char *name = malloc(sizeof(char) + 256);
printf("What is your name? ");
scanf("%s", name);
printf("Hello %s. Nice to meet you.\n", name);
그들은 같은 공간의 이름을 입력 할 때 사용자는 자신의 이름을 입력 할 수 있지만 Lucas Aardvark
, scanf()
이후 모든 전원 단지 상처 Lucas
. scanf()
공백 을 허용 하는 방법
입력이 항상 특정 형식 (아마도없는 경우도 있음)을 확신하지 않는 한 사람 ( 특히 플로)은 절대로 scanf("%s")
또는 gets()
다른 기능을 사용 합니다.
보다 기억 scanf
"형식 스캔"의 약자 소중한 작은 거기에 약간 사용자가 입력 한 데이터를보다 형식은. 입력 데이터 형식을 완벽하게 제어 할 수 있고 일반적으로 사용자 입력에 적합하지 않습니다.
사용 fgets()
( 이 over-플로우 방지 버퍼)로 입력 입력을 문자열 취득하고 sscanf()
그것을 평가. 하지 않고 user-파싱가 입력 입력 한 것을 원하기 sscanf()
때문에이 경우 실제로는 필요하지 않습니다 .
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Maximum name size + 1. */
#define MAX_NAME_SZ 256
int main(int argC, char *argV[]) {
/* Allocate memory and check if okay. */
char *name = malloc(MAX_NAME_SZ);
if (name == NULL) {
printf("No memory\n");
return 1;
}
/* Ask user for name. */
printf("What is your name? ");
/* Get the name, with size limit. */
fgets(name, MAX_NAME_SZ, stdin);
/* Remove trailing newline, if there. */
if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
name[strlen (name) - 1] = '\0';
/* Say hello. */
printf("Hello %s. Nice to meet you.\n", name);
/* Free memory and exit. */
free (name);
return 0;
}
시험
char str[11];
scanf("%10[0-9a-zA-Z ]", str);
희망이 도움이됩니다.
이 예에서는 반전 스캔 셋을 사용하여 scanf는 '\ n'- 줄 바꿈이 나타날 때까지 값을 계속 가져 오기 공백도 저장됩니다.
#include <stdio.h>
int main (int argc, char const *argv[])
{
char name[20];
scanf("%[^\n]s",name);
printf("%s\n", name);
return 0;
}
사용할 수 있습니다.
char name[20];
scanf("%20[^\n]", name);
아니면 이거
void getText(char *message, char *variable, int size){
printf("\n %s: ", message);
fgets(variable, sizeof(char) * size, stdin);
sscanf(variable, "%[^\n]", variable);
}
char name[20];
getText("Your name", name, 20);
scanf()
필드 너비를 지정하지 않고 사용하지 않습니다 . 또한 반환 값에 오류가 있는지 확인해야합니다.
#include <stdio.h>
#define NAME_MAX 80
#define NAME_MAX_S "80"
int main(void)
{
static char name[NAME_MAX + 1]; // + 1 because of null
if(scanf("%" NAME_MAX_S "[^\n]", name) != 1)
{
fputs("io error or premature end of line\n", stderr);
return 1;
}
printf("Hello %s. Nice to meet you.\n", name);
}
또는 다음을 사용하십시오 fgets()
.
#include <stdio.h>
#define NAME_MAX 80
int main(void)
{
static char name[NAME_MAX + 2]; // + 2 because of newline and null
if(!fgets(name, sizeof(name), stdin))
{
fputs("io error\n", stderr);
return 1;
}
// don't print newline
printf("Hello %.*s. Nice to meet you.\n", strlen(name) - 1, name);
}
이 fgets()
함수를 사용 scanf("%[^\n]s",name);
하여 문자열을 읽 거나 줄 바꿈 문자가 발생하면 문자열 읽기가 종료되도록 사용할 수 있습니다.
이제 POSIX의 일부입니다.
free
메모리를 관리해야하지만 이전에 요청한 버퍼 할당 문제도 처리 합니다.
누군가가 여전히 찾고 있다면 공백을 포함하여 임의의 길이의 문자열을 읽는 것이 저에게 효과적이었습니다.
이 간단하고 우아한 솔루션을 공유 한 웹상의 많은 포스터 덕분입니다. 작동하면 신용이 그들에게 전달되지만 오류는 내 것입니다.
char *name;
scanf ("%m[^\n]s",&name);
printf ("%s\n",name);
scanf
약간의 트릭으로이 목적으로 사용할 수 있습니다 . 실제로 사용자가 Enter ( \n
)를 누를 때까지 사용자 입력을 허용해야합니다 . 공백을 포함한 모든 문자를 고려 합니다 . 예를 들면 다음과 같습니다.
int main()
{
char string[100], c;
int i;
printf("Enter the string: ");
scanf("%s", string);
i = strlen(string); // length of user input till first space
do
{
scanf("%c", &c);
string[i++] = c; // reading characters after first space (including it)
} while (c != '\n'); // until user hits Enter
string[i - 1] = 0; // string terminating
return 0;
}
어떻게 작동합니까? 사용자가 표준 입력에서 문자를 입력하면 첫 번째 공백까지 문자열 변수에 저장됩니다 . 그 후 나머지 항목은 입력 스트림에 남아 있으며 다음 스캔을 기다립니다. 다음으로, for
입력 스트림 (till \n
) 에서 문자 단위로 문자를 가져 와서 문자열 변수 끝에 추가 하여 키보드에서 사용자 입력과 동일한 완전한 문자열을 형성 하는 루프가 있습니다.
이것이 누군가를 도울 수 있기를 바랍니다!
당신이 정말로 사용하지 말아야하는 동안 scanf()
이 있기 때문에, 이런 종류의 훨씬 더 같은 호출 gets()
또는 getline()
그것을 할 수 있습니다 :
#include <stdio.h>
char* scan_line(char* buffer, int buffer_size);
char* scan_line(char* buffer, int buffer_size) {
char* p = buffer;
int count = 0;
do {
char c;
scanf("%c", &c); // scan a single character
// break on end of line, string terminating NUL, or end of file
if (c == '\r' || c == '\n' || c == 0 || c == EOF) {
*p = 0;
break;
}
*p++ = c; // add the valid character into the buffer
} while (count < buffer_size - 1); // don't overrun the buffer
// ensure the string is null terminated
buffer[buffer_size - 1] = 0;
return buffer;
}
#define MAX_SCAN_LENGTH 1024
int main()
{
char s[MAX_SCAN_LENGTH];
printf("Enter a string: ");
scan_line(s, MAX_SCAN_LENGTH);
printf("got: \"%s\"\n\n", s);
return 0;
}
/*reading string which contains spaces*/
#include<stdio.h>
int main()
{
char *c,*p;
scanf("%[^\n]s",c);
p=c; /*since after reading then pointer points to another
location iam using a second pointer to store the base
address*/
printf("%s",p);
return 0;
}
참고 URL : https://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-scanf
'IT' 카테고리의 다른 글
소스 이미지가없는 경우 대체 이미지를 표시하는 방법은 무엇입니까? (0) | 2020.07.18 |
---|---|
숫자가 짝수인지 홀수인지 확인 (0) | 2020.07.18 |
점이 너무 많은 산점도 (0) | 2020.07.18 |
NSAttributedText에 HTML 파싱-글꼴을 설정하는 방법? (0) | 2020.07.18 |
Java ArrayList- 순서가 중요하지 않은 목록이 어떻게 알 수 있습니까? (0) | 2020.07.18 |