我对C语法不太熟悉。我需要根据用户输入处理一些数据。虽然我成功处理了数据,但我仍然停留在用户输入部分。我删除了不必要的数据处理部分,并提供了一个简单的示例,说明我如何获取用户输入。任何人都可以告诉我以下代码的问题是什么:
int i, number;
char *str;
str=(char*)malloc(1000*sizeof(char));
printf("Enter count : ");
scanf("%d", &number);
for(i=0; i<number; i++)
{
printf("\nEnter string: ");
scanf ("%[^\n]%*c", str);
printf("%s", str);
}
输出:
&#34;输入计数:&#34;看起来很好,但每当我提供一些价值而点击进入它时,只显示我的数字&#39;计数&#39;输入字符串的数量:不允许用户输入字符串。
例如 -
Enter count : 2
Enter string:
Enter string:
但如果我丢弃计数输入部分并提供任何固定值,例如
for(i=0; i<5; i++)
一切正常
提前致谢
答案 0 :(得分:2)
仅供参考,for(i=0; i<number; i++)
没有问题,扫描逻辑存在问题。
实际上,scanf ("%[^\n]%*c", str);
是不对的。你应该使用%s
来读取字符串,而不是%c
,它读取单个字符,包括 ENTER (换行符)。
相反,我建议,使用fgets()
作为输入。它在各个方面都是更好。查看手册页here。
也许你可以使用像
这样的东西//Dummy code
int i, number;
char *str;
printf("Enter count : ");
scanf("%d", &number);
str=malloc(number*sizeof(char)); //yes, casting not required
fgets(str, (number-1), stdin ); //"number" is used in different context
fputs(str, stdout);
编辑:
工作代码
#include <stdio.h>
#include <stdlib.h>
#define SIZ 1024
int main()
{
int i, number;
char * str = malloc(SIZ * sizeof (char));
printf("Enter the number :\n");
scanf("%d", &number);
getc(stdin); //to eat up the `\n` stored in stdin buffer
for (i = 0; i < number; i++)
{
printf("Enter the string %d :", (i+1));
fgets(str, SIZ-1, stdin);
printf("You have entered :");
fputs(str, stdout);
}
return 0;
}
答案 1 :(得分:0)
输入计数值后会出现换行符\n
,该值由您在scanf中的%c
获取
只需使用%s
扫描字符串,如下所示。
scanf("%s",str);
如果您的输入中有空格。
然后做
char c[50];
fgets(c,sizeof(c),stdin);
检查以下代码:
#include <stdio.h>
#include<stdlib.h>
int main(){
int i, number;
char *str;
str=malloc(1000*sizeof(char));
printf("Enter count : ");
scanf("%d%*c", &number);
for(i=0; i<number; i++)
{
printf("\nEnter string: ");
fgets(str,1000,stdin);
printf("%s", str);
}
}
答案 2 :(得分:0)
的scanf( “%S”,STR);使用此代替您正在使用的代码来获取字符数组中的字符串输入。