scanf() C 中的多个单词
scanf() multiple words in C
我需要一个简单的函数,可以将多个单词读入 C 中的字符串,有点像 Java 中的 Scanner.nextLine()
或 C# 中的 Console.ReadLine()
,但我似乎无法为了在任何地方找到一个简单的方法,我尝试了各种方法,但 none 似乎 100% 的时间都有效。
给你:
#include "stdio.h"
//gets a line from the specified stream
int getline(char* charArray, int maxLength, FILE* stream) {
int i;
if (fgets(charArray, maxLength, stream) == NULL)
return 1; //some error occurred
for (i = 0; i < maxLength; i++) {
if (charArray[i] == '\n') {
if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings
i--;
charArray[i] = '[=10=]';
return 0; //all's well that ends well
} else if (charArray[i] == '[=10=]')
return 0; //smooth sailing fam
}
return 2; //there was no string terminator
}
int main() {
char money[4];
printf("How much money do you have on you? ");
getline(money, 4, stdin);
printf("Oh really? $%d? Good. :)\n", atoi(money));
char string[4];
printf("Where is our next lesson?\n");
getline(string, 4, stdin);
printf("%s", string);
return 0;
}
您可以使用fgets
char *fgets(char *str, int n, FILE *stream)
请注意,fgets 会读取直到达到大小 n、换行符或 EOF。
这是为了避免缓冲区溢出,因此您需要确保您的缓冲区足够大以存储字符串。
scanf
就是你想要的:
#include <stdio.h>
int main(void)
{
char string[50];
scanf(" %49[^\n]s",string);
printf("you entered: %s\n",string);
}
你可以关注这个:
char str[100];// as length of the total words neded
fgets(str,100,stdin)
printf("output: %s",str);
return 0;
使用 fgets 将输入字符串解析为字符缓冲区。
char * fgets ( char * str, int num, FILE * stream );
Here is the link for a better description
然后使用 sscanf 将此字符串分解为您需要的内容。
int sscanf ( const char * s, const char * format, ...);
这会删除 fgets 返回的字符串中包含的“\n”字符,从而使该函数实际上等同于流行的托管语言中存在的函数:
//gets a line from the specified stream
int getline(char* charArray, int maxLength, FILE* stream) {
int i;
if (fgets(charArray, maxLength, stream) == NULL)
return 1; //some error occurred
for (i = 0; i < maxLength; i++) {
if (charArray[i] == '\n') {
if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings
i--;
charArray[i] = '[=10=]';
return 0; //all's well that ends well
} else if (charArray[i] == '[=10=]')
return 0; //smooth sailing fam
}
return 2; //there was no string terminator
}
我需要一个简单的函数,可以将多个单词读入 C 中的字符串,有点像 Java 中的 Scanner.nextLine()
或 C# 中的 Console.ReadLine()
,但我似乎无法为了在任何地方找到一个简单的方法,我尝试了各种方法,但 none 似乎 100% 的时间都有效。
给你:
#include "stdio.h"
//gets a line from the specified stream
int getline(char* charArray, int maxLength, FILE* stream) {
int i;
if (fgets(charArray, maxLength, stream) == NULL)
return 1; //some error occurred
for (i = 0; i < maxLength; i++) {
if (charArray[i] == '\n') {
if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings
i--;
charArray[i] = '[=10=]';
return 0; //all's well that ends well
} else if (charArray[i] == '[=10=]')
return 0; //smooth sailing fam
}
return 2; //there was no string terminator
}
int main() {
char money[4];
printf("How much money do you have on you? ");
getline(money, 4, stdin);
printf("Oh really? $%d? Good. :)\n", atoi(money));
char string[4];
printf("Where is our next lesson?\n");
getline(string, 4, stdin);
printf("%s", string);
return 0;
}
您可以使用fgets
char *fgets(char *str, int n, FILE *stream)
请注意,fgets 会读取直到达到大小 n、换行符或 EOF。 这是为了避免缓冲区溢出,因此您需要确保您的缓冲区足够大以存储字符串。
scanf
就是你想要的:
#include <stdio.h>
int main(void)
{
char string[50];
scanf(" %49[^\n]s",string);
printf("you entered: %s\n",string);
}
你可以关注这个:
char str[100];// as length of the total words neded
fgets(str,100,stdin)
printf("output: %s",str);
return 0;
使用 fgets 将输入字符串解析为字符缓冲区。
char * fgets ( char * str, int num, FILE * stream );
Here is the link for a better description
然后使用 sscanf 将此字符串分解为您需要的内容。
int sscanf ( const char * s, const char * format, ...);
这会删除 fgets 返回的字符串中包含的“\n”字符,从而使该函数实际上等同于流行的托管语言中存在的函数:
//gets a line from the specified stream
int getline(char* charArray, int maxLength, FILE* stream) {
int i;
if (fgets(charArray, maxLength, stream) == NULL)
return 1; //some error occurred
for (i = 0; i < maxLength; i++) {
if (charArray[i] == '\n') {
if (i != 0 && charArray[i - 1] == '\r') //cater for windows line endings
i--;
charArray[i] = '[=10=]';
return 0; //all's well that ends well
} else if (charArray[i] == '[=10=]')
return 0; //smooth sailing fam
}
return 2; //there was no string terminator
}