C 函数从用户输入中读取句子
我试着从用户输入的问题中读出这个句子,我的函数是,当我试图调用它时,它跳过了第二次尝试。有解决办法吗C 函数从用户输入中读取句子,c,C,我试着从用户输入的问题中读出这个句子,我的函数是,当我试图调用它时,它跳过了第二次尝试。有解决办法吗 void readString(char *array, char * prompt, int size) { printf("%s", prompt); char c; int count=0; char * send = array; while ((c = getchar()) != '\n') { send[count] = c; coun
void readString(char *array, char * prompt, int size) {
printf("%s", prompt);
char c; int count=0;
char * send = array;
while ((c = getchar()) != '\n') {
send[count] = c; count++;
if (size < count){ free(array); break; } //lets u reserve the last index for '\0'
}
}
以下是输入示例:
“这是一句话”
因此,我想这样做:
printf(" %s | %s \n",obligation, dodatno);
并获得:
这是一句话,这是另一句话
在readString()函数中
malloc()
或family不会动态分配array
内存
使用未分配内存的指针调用free()
,会动态创建未定义的行为
getchar()
返回一个int
。您应该将c
的类型更改为int c
另外,readString()
中的输入没有空终止符,因此不能直接将数组用作字符串。您需要自己使用null终止数组,作为读取缓冲区,稍后用作字符串
好了:)
请说明您的输入和预期输出。SOER可以更好地帮助您。您是对的,我更新了问题。使用scanf
和“%[^\n]”
会更容易,正如我在回答中提到的那样。或者简单地使用fgets
。但如果我想检查句子中的所有字符呢?这也是错误的c
应该是@SouravGhosh提到的int
,如果执行break
语句,array[count]='\0'
与数组[1500]='\0'相同代码>写入无效内存位置,调用未定义的行为。仍然存在跳过第一个变量的问题:)@VladimirDjukic“跳过第一个变量”是什么意思?@VladimirDjukic您的问题在其他地方(可能是因为在调用函数之前有一个scanf
)。您可以通过添加intc;而((c=getchar())!='\n'&&c!=EOF)代码>调用前读取字符串(义务,“输入义务”,150)代码>。顺便说一句,不应该150
是1500
?@VladimirDjukic delete,而((c=getchar())!='\n'&&c!=EOF)代码>和scanf(“%d”、&days)代码>更改为scanf(“%d%*c”、&days)代码>很好的答案。添加if(size
需要if(size-1
printf(" %s | %s \n",obligation, dodatno);
void readString(char *array, char * prompt, int size) {
printf("%s", prompt);
int c; int count=0;
while((c = getchar()) != '\n' && c != EOF);
while ((c = getchar()) != '\n') {
array[count] = c; count++;
if (count == (size - 1)) { break; }
}
array[count] = '\0';
}