如何在scanf字符串中包含空格?

时间:2017-04-15 01:42:50

标签: c char scanf

这个程序只要" major"变量只有一个字。例如,CIS是有效的输入,但计算机信息系统则不是。我该如何解决这个问题?

#include<stdio.h>

int main()
{
char major [51];
int classes;

printf("What is your major? ");
scanf("%50s", major);

printf("How many classes are you taking this semester? ");
scanf("%d", &classes);

printf("Your major is %s and you are taking %d classes this semester.\n", major, classes);
}

2 个答案:

答案 0 :(得分:3)

您可以使用%50[^\n]匹配最多50个字符,直到遇到换行符,并将其存储在major[]中。换行符将留在输入流中,但%d转换说明符会自动跳过前导空白字符。

请注意,如果用户输入的字符数超过50个,则在调用scanf()以获取类数之前,输入流中将有额外的字符要丢弃。

答案 1 :(得分:2)

你的问题是scanf在第一个空格处停止。您需要做的是继续阅读,直到您阅读结束字符。

可以使用scanf执行此操作,但有更好的选择。立刻想到fgets()https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm

关于堆栈溢出的一些搜索将产生大量关于scanf() vs fgets()与其他人相关的主题。 Using fscanf() vs. fgets() and sscanf()