[英]How To Read String that contains Spaces, in C language
當字符串在單詞之間包含空格時,從C鍵盤讀取字符串的最准確方法是什么? 當我為此目的使用scanf時,它不會讀取帶空格的字符串。第二個選項是使用gets但它應該是有害的(我也想知道為什么?)。另一件事是我不知道想要使用任何文件處理概念,例如fgets。
這是讀取包含不使用gets
或fgets
空格的字符串的2種方法
您可以使用getline
(系統中可能不存在POSIX 2008)來方便地管理具有足夠大小的緩沖區的分配,以捕獲整個行。
char *line = NULL; size_t bufsize = 0; size_t n_read; // number of characters read including delimiter while ((n_read = getline(&line, &bufsize, stdin)) > 1 && line != NULL) { // do something with line }
如果您絕對需要scanf
,則在此示例中,它將讀取到行尾,除非該行的分隔符數超過指定的字符數減1。 在后一種情況下,該行將被截斷,您將在下一個scanf
調用中獲得剩余的字符。
char line[1024]; while (scanf("%1023[^\\n]\\n", line) == 1) { // do something with line }
我還應該指出,例如,當您使用scanf
從鍵盤讀取字符串時,實際上是從文件指針stdin
讀取文件。 因此,您無法避免“任何文件處理概念”
@ user3623265,
請找到一個示例程序,該程序使用fgets從標准輸入中讀取字符串。
請參考一些示例C文檔,了解如何使用fgets從鍵盤獲取字符串以及stdin的目的是什么。
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[80];
int i;
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
i = strlen(str) - 1;
if (str[i] == '\n')
str[i] = '\0';
printf("This is your string: %s", str);
return 0;
}
還有第三個選項,您可以通過read()
調用從stdin
讀取原始數據:
#include <unistd.h>
int main(void) {
char buf[1024];
ssize_t n_bytes_read;
n_bytes_read = read(STDIN_FILENO, buf, sizeof(buf) - 1);
if (n_bytes_read < 0) {
// error occured
}
buf[n_bytes_read] = '\0'; // terminte string
printf("\'%s\'", buf);
return 0;
}
請不要將每個輸入都原始復制到buf
包括尾隨返回。 也就是說,如果您輸入Hello World
您將獲得
'Hello World
'
作為輸出。 在線嘗試。
如果您堅持在范圍內沒有FILE *,請使用getchar()。
char buff[1024];
int ch;
int i = 0;
while( (ch = getchar()) != '\n' )
if(i < 1023)
buff[i++] = ch;
buff[i] = 0;
/* now move string into a smaller buffer */
但是,通常可以接受stdout和stdin和FILE *可用。 您的要求有些奇怪,並且,由於您顯然不是高級的C程序員,而她又非常需要抑制FILE *符號,因此我懷疑您對C IO的理解是不穩定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.