代码运行良好。但是当用户输入一个字符串时,它会写在同一位置。我希望它写在他旁边。例如5个长度的单词“ EARTH”和2个。 输入的是“火星”
我想要这样/////,但是现在就这样
array [9] ='S'
我尝试使用[^ \ n]认为,但是没有用(我认为我做对了)
我尝试了scanf(
我尝试过getline()
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
char str[10][20];
void getting_veriables(),printing();
int main (){
getting_veriables();
printing();
}
void printing() {
int x,y;
for(x = 0;x<10;x++){
printf("\n");
for(y = 0;y<20;y++){
printf(" |%c| ",str[x][y]);
}
}
}
void getting_veriables(){
int length=0,limit,a=0;
printf("How many word's you will enter ? : ");
scanf("%d",&limit);
// taking how much word will be enter
if(limit<=10 && limit>=3){
a=1;
}
else{
printf("You can enter min 3 max 10 words\n");
a=0; // I will replace it with exit think.
system("PAUSE");
}
for(;limit!=0 && a==1;limit--){
fflush(stdin);
printf("Please enter your words : ");
gets(str); // the problem is here i think.
length = strlen(str); // taking lenght of the word.
if(length > 20 || length < 3)
{
printf("Your number must be between 3-20 lenght\n");
exit(1);
}
}
}
它写输入1 =示例输入2 =在左上角思考。
答案 0 :(得分:2)
避免使用gets
,它已被弃用并且很危险。
您正在将所有输入写入相同的存储位置str
,它将在您遇到的情况下覆盖旧数据。您想在第二个输入之后写入第二个输入,因此需要将第一个输入的长度添加到str
:
示例:
gets(str + length);
// "EARTH\0\0\0\0"
// ^ str // 1st input gets stored starting here
// ^ str + length // 2nd starting here
然后,您还想增加长度,而不是覆盖它:
length += strlen(str)
如果要添加空格,只需增加length
:
str[length] = ' ';
length += 1;
答案 1 :(得分:0)
从您的声明中,
char str[10][20];
您似乎打算最多存储10个字符串,每个字符串的长度不超过20个字符。
您对问题可能出在哪里的猜测似乎是正确的。
gets(str); // the problem is here i think.
gets(str)与gets(&str [0])相同,因此您一遍又一遍地读取相同的索引。 您应该可以通过如下重写for循环来解决此问题-
for(i=0; i<limit && a==1; i++){
. . .
gets(str[i]); // the problem is here i think.
length = strlen(str[i]); // taking lenght of the word.
. . .
}