我无法在Ubuntu上的C中同时获取两个输入字符串。它显示错误的输出。 简单程序:
#include <stdio.h>
main()
{
char s1[20],char s2[20],printf("\nEnter job:");
scanf("%[^\n]s",s1);
printf("Enter hobby:");
scanf("%[^\n]s",s2);
}
输出:
Enter job:student
Enter hobby:
student
它不允许输入第二个字符串。我怎样才能克服这个错误?
答案 0 :(得分:1)
如果您想允许嵌入空格,请以这种方式修改scanf
格式:
#include <stdio.h>
int main(void) {
char job[100], hobby[100];
printf("Enter job:");
scanf("%99[^\n]%*c", job);
printf("Enter hobby:");
scanf("%99[^\n]%*c", hobby);
printf("%s,%s", job, hobby);
return 0;
}
但请注意,此scanf
格式不接受空行。换行将保留在输入流中,第二个scanf
也将失败,job
和/或hobby
将具有不确定的内容,让printf
调用未定义的行为。
使用fgets()
并删除'\n'
。
#include <stdio.h>
#include <string.h>
int main(void) {
char job[100], hobby[100];
printf("Enter job:");
if (!fgets(job, sizeof job, stdin))
return 1;
job[strcspn(job, "\n")] = '\0';
printf("Enter hobby:");
if (!fgets(hobby, sizeof hobby, stdin))
return 1;
hobby[strcspn(hobby, "\n")] = '\0';
printf("%s,%s", job, hobby);
return 0;
}