관련 코드 스 니펫 :
char input [1024];
printf("Enter text. Press enter on blank line to exit.\n");
scanf("%[^\n]", input);
사용자가 [enter]를 누를 때까지 전체 줄을 읽으며, 사용자가 원하는 경우 두 번째 줄을 입력하지 못하게합니다.
종료하려면 [enter]를 누른 다음 [enter]를 다시 누르십시오. 그래서 모든 종류의 while 루프, for 루프 및 새로운 줄 이스케이프 시퀀스와 관련된 scanf () 주위의 if 문을 시도했지만 아무것도 작동하지 않는 것 같습니다.
어떤 아이디어?
- 답변 # 1
- 답변 # 2
아직 지적했듯이
fgets()
scanf()
보다 여기가 낫다 .fgets(input, 1024, stdin);
로 전체 줄을 읽을 수 있습니다
어디stdin
표준 입력(키보드)과 연결된 파일입니다.
fgets()
기능 키보드에서 첫 번째 줄 바꿈 문자까지 모든 문자를 읽습니다 : '\ n'(물론ENTER키를 눌렀을 때 얻을 수 있습니다 ...).
중요 :문자 '\ n'은입력배열의 일부입니다.이제 다음 단계는 배열의 모든 문자가입력,
첫 번째부터 '\ n'까지는 공백입니다.
또한입력에서 첫 번째 '\ n'뒤의 모든 문자는 쓰레기이므로 확인하지 않아도됩니다.귀하의 프로그램은 다음과 같습니다.
char input[1024]; printf("Enter text. Press enter on blank line to exit.\n"); while (1) { if (fgets(input, 1024, stdin) == NULL) printf("Input Error...\n"); else { /* Here we suppose the fgets() has reached a '\n' character... */ for (char* s = input; (*s != '\n') && isspace(*s); s++) ; /* skipping blanks */ if (*s == '\n') break; /* Blank line */ else printf("%s\n", input); /* The input was not a blank line */ } }
이 코드는
main()
안에 작성해야합니다 차단 및
더 중요한 것은 헤더<ctype.h>
를 포함해야합니다. 우선,
isspace()
때문에 기능이 사용됩니다.
코드는 간단합니다 :영원히실행되는 동안 사용자는 각 반복에 한 줄을 입력하면if문장은 오류가 있는지 확인합니다 일어났다.
모든 것이 정상이면for (;;)문이 실행되어입력배열을 탐색하여 공백이 있는지 확인합니다.
for반복은 첫 번째 줄 바꿈 '\ n'까지 계속되거나 비어 있지 않은 문자가 나타납니다.
for가 종료되면 이는 마지막으로 분석 된 문자 (*s
에 있음)를 의미합니다은input []에 공백이 아닌 문자가 있음을 의미하므로input은 일반 텍스트).
와이즈 비즈 와이즈 비즈 빈 줄이있는 경우에만 중단됩니다. 읽다 (The "ethernal" 참조) 11 번째 줄의 문구).
- 답변 # 3
OP에서 "종료하려면 [enter]을 (를) 누른 다음 [enter]]를 다시 누르십시오"
while(1)
- 답변 # 4
break
- 답변 # 5
unsigned ConsecutiveEnterCount = 0; for (;;) { char buffer[1024]; if (fgets(buffer, sizeof(buffer), stdin) == NULL) { break; // handle error or EOF } if (buffer[0] == '\n') { ConsecutiveEnterCount++; if (ConsecutiveEnterCount >= 2 /* or 1, not clear on OP intent */) { break; } } else ConsecutiveEnterCount = 0; // Do stuff with buffer; }
읽기전에 시도하지 말아야 할 모든 것을 시도한 것 같습니다!AC 프로그래머는설명서를 읽거나예상하지 못한정의되지 않은 동작을 실행하여 사용자와 같은 두통을 유발하지 않도록합니다. 경험했습니다. 좀 더 정교하게 말하면 자바처럼추측하여 C를 배울 수 없습니다.
이 교훈을 고려하십시오.추측을 중지하고읽기시작 (
#include <stdio.h> int main(){ char arr[40]; int i; for( i = 0; i < sizeof(arr); i +=2 ){ scanf("%c%c",&arr[i],&arr[i+1]); if( arr[i] == '\n' && arr[i+1] == '\n' ) break; } printf("%s", arr); return 0; }
) 수동)!해당 매뉴얼에 따르면 :
와이즈 비즈 와이즈 비즈 예상 바이트 세트 (스캔 세트)에서빈 없음바이트 시퀀스와 일치합니다.중점은 나의 것이다.빈바이트 시퀀스는일치실패를 의미합니다. 설명서에서일치하는 실패에 대해 무엇을 말합니까?
와이즈 비즈다시 강조하자면 ... 이것은 대부분의 다른 C 표준 함수와 마찬가지로반환 값을 확인해야합니다!
... I tried all sorts of while loops, for loops, and if statements around the scanf() involving the new line escape sequence but nothing seems to work.
fscanf
의 선을 따라 관용구를 작성하십시오. .오류 처리는 어디에 있습니까?반환 값은 단순한이진 선택이 아닙니다. 어디
변환이 수행되고,
[
가 있습니다Upon successful completion,these functions shall return the number of successfully matchedand assigned input items;this number can be zero in the event of an early matching failure. If the input ends before the first conversion (if any) has completed, and without a matching failure having occurred, EOF shall be returned. If an error occurs before the first conversion (if any) has completed, and without a matching failure having occurred, EOF shall be returned...
fopen
.if (fp == NULL) { /* handle error */ }
를 사용하려고 시도하기 전에 각각의 의미를 이해해야합니다. .n
관련 자료
- python - csv 파일에 대한 사용자 입력을 여러 줄로 어떻게 인쇄합니까?
- syntax - C ++에서 "cout"접두사를 계속 추가하지 않고도 여러 줄의 문자열 출력을 입력 할 수 있습니까?
- c - 입력이 주어진 숫자 유형보다 큰 경우에도 scanf가 양수 값을 반환하는 이유는 무엇입니까?
- forms - Flask Python으로 jinja 템플릿에서 여러 행 입력 처리
- Python에서 여러 줄의 텍스트 파일을 읽고 쓰는 방법
- javascript - js - 여러 입력 필드에 값 삽입
- JavaScript를 사용하여 입력 필드에서 여러 값을 가져 오는 방법
- reactjs - 지도에서 여러 입력 개체 값을 제어하려면 어떻게해야합니까?
- text processing - awk를 사용하여 배수 + 1의 모든 줄 제거
- sed - 여러 줄의 일치 패턴
- python - Matplotlib를 사용하여 그래프의 여러 줄 비교
- python - 파일의 행을 읽은 다음 특정 수의 행이 될 때까지 추가
- c# - 두 문자열 사이의 여러 줄에 걸쳐 텍스트 세그먼트를 바꿉니다정규식
- ggplot2 - 여러 열 R에 대한 산점도 및/또는 회귀선 플로팅
- javascript - mapbox-gl-js의 단일 레이어에 여러 줄을 어떻게 사용합니까?
- linux - UNIX 명령 줄 도구를 사용하여 JSON을 여러 줄로 분할
- python - 사용자 입력으로 여러 사전/리터럴을 검색하는 방법
- c++ - 한 줄의 파일에서 여러 데이터 값 읽기
- file - Linux에서 여러 코드를 기반으로 줄을 추출하는 방법은 무엇입니까?
- c - 씨 - scanf ()로 여러 문자열을 가져올 수 없습니다
이것을 시도하십시오 :