这个程序只要" 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);
}
答案 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()